во-первых, пожалуйста, простите мое невежество и неспособность, поэтому используйте поисковую систему (клянусь, я долго и часто искал, но не нашел удовлетворительного ответа на эту проблему).
У меня есть bean-компонент, реализующий метод, совместимый с прослушивателем действий:
@ManagedBean(name = "myBean")
@ViewScoped
class Bean{
public String myAction(ActionEvent event){
... = event.getComponent().getAttributes().get("something");
}
}
Затем у меня есть такой компонент jsf:
<composite:interface>
<composite:attribute name="actionBean" required="true"/>
<composite:attribute name="actionMethod" method-signature="void myAction(javax.faces.event.ActionEvent)" />
</composite:interface>
<composite:implementation>
<h:form>
<p:commandButton actionListener="#{cc.attrs.actionBean[cc.attrs.actionMethod]}">
<f:attribute name="something" value="somevalue" />
</p:commandButton>
</h:form>
</composite:implementation>
Называется примерно так:
<namespace:myComponent actionBean="#{myBean}" actionMethod="myAction" />
Я знаю, что этот звонок не работает, и мне интересно, как это сделать правильно!
Мое основное намерение состоит в том, что я хочу иметь относительно общий jsf-компонент (было бы неплохо, чтобы его можно было повторно использовать позже), который содержит кнопку. При нажатии на эту кнопку я хочу передать объект (не простая строка! В случае строки я бы просто использовал action="..."
и передал ее через f:param
). Методом actionListener
я беру объект через event.getComponent().getAttributes().get("something")
.
Я думаю, что сигнатура void myAction(javax.faces.event.ActionEvent)
является проблемой, которая нарушает передачу связанного метода компоненту, не так ли? Можно ли вообще передать метод с любым аргументом компонентам jsf (и если да, то как)?
Итак, я надеюсь, что есть возможное решение общей проблемы с изменением вышеуказанной стратегии или, возможно, использование чего-то хорошего и другого (в целом я предпочитаю не использовать какие-либо хаки или обходные пути, но предпочитаю использовать то, что предназначено фреймворком) .
Спасибо, если кто-нибудь найдет время, чтобы указать мне путь! Если этот вопрос уже существует, было бы неплохо перейти к соответствующему сообщению и удалить его.