因此,當組件更改值時,我今天大部分時間都試圖調用支持bean中的方法。如果我的組件位於<p:dialog>
之外,則一切正常,但嵌套在對話框中時,服務器端永遠不會發生。最初我正在與<p:calendar>
控件一起工作,但注意到它也無法使用簡單的inputText。下面的示例工作:如何在p:對話框中觸發ajax事件
<h:panelGrid columns="3">
<h:outputText value="Start"/>
<p:inputText id="startOfRange" value="#{myBean.startRange}" valueChangeListener="#{myBean.startChanged}">
<p:ajax event="change" update="play"/>
</p:inputText>
<h:outputText id="play" style="margin-left: 10px;" value="#{myBean.startRange}"/>
</h:panelGrid>
我支持bean方法看起來像
public void startChanged(ValueChangeEvent event) { }
這種方法是一個標籤出的inputText後調用,但是當裹得像以下方法不會被調用:
<p:dialog widgetVar="efDlg" zindex="10" appendToBody="true" header="Create Custom Date Range"
modal="true" height="375" width="450" resizable="false" closable="false" >
<h:panelGrid columns="4">
<h:outputText value="Start"/>
<p:inputText id="startOfRange" value="#{myBean.startRange}" valueChangeListener="#{myBean.startChanged}">
<p:ajax event="change" update="play"/>
</p:inputText>
<h:outputText id="play" style="margin-left: 10px;" value="#{myBean.startRange}"/>
<p:inputText id="endOfRange" value="#{myBean.endRange}" valueChangeListener="#{myBean.endChanged}"/>
</h:panelGrid>
<div class="customRangeButtons">
<span>
<p:commandButton value="Cancel" onstart="efDlg.hide();" actionListener="#{myBean.cancelCustomDateRange}" update="pGraphs"/>
</span>
<span style="margin-left: 300px;">
<p:commandButton value="Ok" type="submit" onstart="efDlg.hide();" action="#{myBean.saveCustomDateRange()}" update="pGraphs"/>
</span>
</div>
</p:dialog>
注意我在Mojarra 2.1.0中使用Primefaces 2.2.1。任何想法,爲什麼我不能調用startChanged方法時值被改變?
作爲一項解決方案,我切換了p:dialog並手動製作了一個jQuery對話框。這很好。 –
這是一個明智的選擇。即使2.2.1是穩定版本,它也有很多方法可以與對話組件一起使用。這些是常見的和反覆出現的主題,其中某些組件行爲在包含在對話框中時是不同的或不存在的。從我收集的內容來看,它主要與底層YUI對話框將DOM元素物理地移入和移出表單的方式有關。 –
我一直有''的主要問題。我認爲它不適合使用''的Facelet頁面。不知道你是否也使用佈局。我希望他們能夠在未來的版本中穩定對話。 –