[英]JSF Lifecycle performed 2 times with PrimeFaces ajax
我在WebSphere Application Server上使用PrimeFaces 3.3.1和Apache MyFaces 2。 我的BackingBean是SessionScoped。 我有一個帶有selectOneButton的表單應該更新整個表單。
<h:form id="options">
<p:panelGrid>
<p:column rowspan="2" style="width:115px;">
<p:selectOneButton value="#{graph.diagramdata}" id="diagramdata">
<f:selectItem itemLabel="WAS-Diagramm" itemValue="1" />
<f:selectItem itemLabel="PSC-Diagramm" itemValue="2" />
<p:ajax listener="#{graph.changeView }" update=":options"/>
</p:selectOneButton>
<h:outputText>#{graph.diagramdata}</h:outputText>
</p:column>
<p:column rendered="#{graph.diagramdata eq '1' }">
...
</p:column>
</p:panelGrid>
</h:form>
編輯:背部豆的一部分
@ManagedBean(name = "graph")
@SessionScoped
public class MyGraphBean implements Serializable {
private int diagramdata;
public void changeView(AjaxBehaviorEvent event) {
LOGGER.info(this.getDiagramData());
}
public int getDiagramdata() {
return diagramdata;
}
public void setDiagramdata(int diagramdata) {
if(diagramdata == 1 || diagramdata == 2) {
this.diagramdata = diagramdata;
}
}
}
但是當我更改一個值時,jsf生命周期會執行2次。 第一次in.getValue是第二次它是1或2(來自LOGGER)。 但最后我的h:outputText打印0 ...
要調試我使用BalusC:Debug JSF Lifecycle
為什么te生命周期進行了2次?
如何使用我的selectOneButton正確呈現其他列?
編輯:骯臟的解決方案
我找到了解決問題的方法(很臟!!!)。 我將p:ajax組件更改為f:ajax。 所以現在我的值在第二個生命周期階段被設置為正確的值。
<p:selectOneButton value="#{graph.diagramdata}" id="diagramdata">
<f:selectItem itemLabel="WAS-Diagramm" itemValue="1" />
<f:selectItem itemLabel="PSC-Diagramm" itemValue="2" />
<f:ajax listener="#{graph.changeView }" render="options"/>
</p:selectOneButton>
我還在我的setter方法中添加了一個if語句,以避免設置“0”。
現在第一個jsf生命周期什么也沒做,第二個設置我的價值。
它有效,但不是很好......
什么是onchange="submit()"
你有嗎? 是否有機會提交表格? 如果是,那么刪除它......
另外,你確定你需要immediate="true"
你是否計划跳過驗證?
看起來像PrimeFaces selectOneButton的錯誤。 當我使用例如p:selectOneMenu時,它可以正常使用1個JSF生命周期!
這是primefaces的已知問題 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.