2012-10-10 97 views
0

我在組織表單時遇到問題。當我做一個表單按鈕(或任何其他組件進行Ajax調用)不執行操作,但他們確實執行更新。當我將窗體分成兩個新窗體時,按鈕開始工作。JSF表單中的按鈕有時不會執行操作

在這種情況下,按鈕和自動完成功能不起作用。

<h:form styleClass="question-#{cc.attrs.question.id}"> 
    ... 

    <p:commandButton value="add answer" update="@form" action="#{questionEditorBean.addAnswer}" /> 
    <p:commandButton value="save" update="@(.question-#{cc.attrs.question.id})" action="#{cc.attrs.onSave}" oncomplete="#{cc.attrs.onCancel}" /> 
    <p:commandButton value="cancel" onclick="#{cc.attrs.onCancel}" /> 

    <p:autoComplete value="#{questionEditorBean.newTag}" id="tagSelect" completeMethod="#{tagBean.completeTag}" dropdown="true" 
       var="t" itemLabel="#{t.name}" itemValue="#{t}" converter="#{tagConverter}" forceSelection="true"> 
    <p:ajax event="itemSelect" action="#{action}" update="@form"/> 
</p:autoComplete> 
</h:form> 

當我拆分窗體一切正常。

<h:form styleClass="question-#{cc.attrs.question.id}"> 
    ... 

    <p:commandButton value="add answer" update="@form" action="#{questionEditorBean.addAnswer}" /> 
    <p:commandButton value="save" update="@(.question-#{cc.attrs.question.id})" action="#{cc.attrs.onSave}" oncomplete="#{cc.attrs.onCancel}" /> 
    <p:commandButton value="cancel" onclick="#{cc.attrs.onCancel}" /> 

</h:form> 
<h:form> 

    <p:autoComplete value="#{questionEditorBean.newTag}" id="tagSelect" completeMethod="#{tagBean.completeTag}" dropdown="true" 
       var="t" itemLabel="#{t.name}" itemValue="#{t}" converter="#{tagConverter}" forceSelection="true"> 
    <p:ajax event="itemSelect" action="#{action}" update="@form"/> 
</p:autoComplete> 
</h:form> 

我沒有嵌套窗體。我一直在遇到這個問題。我不明白這種行爲,我不想將按鈕和組件分成更多的形式,當它們應該在概念上在一起時。有解決方案嗎?

+0

cc.attrs.onCancel是你bean中的一個方法還是代表客戶端js函數的文本? – Daniel

+0

這是JavaScript。關閉對話框。 – ziri

+0

你的最新動作無法以單一形式工作? – Daniel

回答

0

你可以嘗試給形式的id並設置prependId="false",如本例:

<h:form id="ccForm" prependId="false"> 

然後添加表格ID來update目標。

<p:ajax event="itemSelect" action="#{action}" update="ccForm:tagSelect" /> 

這樣您可以明確指出複合組件內部的update目標是什麼。

另外我注意到,您試圖在表單中使用styleClass作爲id,並嘗試更新它。根據這一辦法,我建議,使其update屬性是這樣的:

<p:commandButton value="save" update="ccForm:question-#{cc.attrs.question.id}" action="#{cc.attrs.onSave}" oncomplete="#{cc.attrs.onCancel}" /> 

我希望它能幫助。

+0

我使用了styleClass,因爲我希望頁面上的這個類的所有組件都被更新。我會使用name屬性,但JSF不會讓我。那麼,正常的行爲是不是在服務器上調用動作而沒有任何警告,但是更新中的元素會被更新?我希望有一些解決方案使它能夠以一種形式工作。 – ziri