Я буду очень рад получить достойное объяснение для следующего случая.
Вот простой JSF с двумя формами и выводом текста:
<h:body>
<h:form>
<h:commandButton value="Go" action="#{wierdBean.doWierdStuff}"/>
</h:form>
<h:form>
<h:dataTable value="#{wierdBean.pages}" var="page">
<h:column>
<h:commandButton value="the same go action?" action="#{wierdBean.doWierdStuff}"/>
</h:column>
</h:dataTable>
</h:form>
</h:body>
<h:dataTable value="#{wierdBean.pages}" var="page">
<h:column>
<h:outputText value="#{page}"/>
</h:column>
</h:dataTable>
Кнопка «Перейти» вверх должен делать то же самое, что и «тот же ход»?кнопки.
Поддержка WierdBean:
public class WierdBean implements Serializable {
private int buttonsCount;
public WierdBean() {
System.out.println("WierdBean()");
}
@PostConstruct
public void postConstruct() {
System.out.println("postConstruct()");
}
public Integer[] getPages() {
System.out.print("getPages() buttonsCount(): " + buttonsCount);
Integer[] pages = new Integer[buttonsCount];
for (int i = 0; i < pages.length; i++) {
pages[i] = new Integer(i);
}
return pages;
}
public String doWierdStuff() {
System.out.println("doWierdStuff()");
buttonsCount = 2;
return "wierd";
}
}
При входе на страницу я получаю:
INFO: WierdBean()
INFO: postConstruct()
INFO: getPages() buttonsCount(): 0 (16 times)
, и я вижу только кнопку «Перейти».Это понятно.
После нажатия кнопки «Перейти» я получаю:
INFO: WierdBean()
INFO: postConstruct()
INFO: getPages() buttonsCount(): 0 (19 times)
INFO: doWierdStuff()
INFO: getPages() buttonsCount(): 2 (16 times)
Хорошо, вызывается doWierdStuff, а затем я получаю 2 кнопки «одно и то же действие» и 2 текстовых вывода.Это нормально.
Однако, когда я нажимаю любую из кнопок «то же действие», которые должны делать то же самое, что и кнопка «Перейти» - вызов метода doWierdStuff - я получаю:
INFO: WierdBean()
INFO: postConstruct()
INFO: getPages() buttonsCount(): 0 (44 times)
Видна только кнопка «Перейти».
Почему это так?