Google App Engine: f: setPropertyActionListener с p: ajax
Еще раз сочетание PrimeFaces и GAE сводит меня с ума. Внутри p:dataTable
я хочу щелкнуть изображение, вызвать метод bean и задать параметр. Метод вызывается, но параметр не работает. Вот упрощенный пример (без таблицы):
<h:form id="f1">
<h:outputText id="text" value="#{testBean.index}"/>
<h:graphicImage url="/images/cut.png">
<p:ajax event="click" process="@this" update="text"
actionListener="#{testBean.test}" >
<f:setPropertyActionListener target="#{testBean.index}" value="5" />
</p:ajax>
</h:graphicImage>
</h:form>
Мой TestBean
выглядит так:
@javax.faces.bean.ManagedBean @ViewScoped
public class TestBean implements Serializable{
private int index; // getter/setter
@PostConstruct public void init() {
index = 0;log.log(Level.WARNING, "@PostConstruct");}
public void test(ActionEvent ae){
log.log(Level.WARNING, "Index: "+index);}
}
В логах я вижу один @PostConstruct
и после нажатия на изображение всегда Index: 0
Update проблема обновления значения может быть рассмотрена здесь JSF GAE: обновление значения Задача в управляемом методе bean
1 ответ:
Я мало что знаю о Гэ, поэтому не могу предположить, что он каким-то образом не вмешивается в ваш код. Однако я не думаю, что
Вот пример того, как я реализовал ajax-вызов свойства viewscoped bean, используя<f:setPropertyActionListener>
является подходящим тегом для тега<p:ajax>
. Я не верю, что он принимает это.<p:commandLink>
и HTML-тег<span>
.<p:commandLink actionListener="#{listUsers.toModify}" oncomplete="userEditDlg.show()" update="addEditForm:editGrid addEditGrid:passwordChange addEditGrid:passwordGrid"> <f:param name="userId" value="#{user.userId}" /> <span class="ui-icon icoCogEdit" style="padding-right: 1.5em;" /> </p:commandLink> <p:commandLink actionListener="#{listUsers.toDelete}" oncomplete="userDelDlg.show()" update="listUsersForm:dialogText"> <f:param name="userId" value="#{user.userId}"/> <span class="ui-icon icoDelete" /> </p:commandLink>
Я просто установил класс CSS в качестве статического значка изображения по моему выбору, а затем, нажав на него, вызвал бы диалог.