我想修改PrimeFaces展示應用中的示例"ajaxify select",並引入第三個p:selectOneMenu
,並根據第二個p:selectOneMenu
的選擇進行選擇。3 Ajax的級聯下拉菜單
下面是修改代碼:
<h:form>
<p:growl id="msgs" showDetail="true"/>
<p:panel header="Double Combo" style="margin-bottom:10px;">
<h:panelGrid columns="3" cellpadding="5">
<p:selectOneMenu id="city" value="#{pprBean.city}">
<f:selectItem itemLabel="Select City" itemValue="" />
<f:selectItems value="#{pprBean.cities}" />
<p:ajax update="suburbs"
listener="#{pprBean.handleCityChange}" />
</p:selectOneMenu>
<p:selectOneMenu id="suburbs" value="#{pprBean.suburb}">
<f:selectItem itemLabel="Select Suburb" itemValue="" />
<f:selectItems value="#{pprBean.suburbs}" />
<p:ajax update="subsuburbs"
listener="#{pprBean.handleSuburbChange}" />
</p:selectOneMenu>
<p:selectOneMenu id="subsuburbs" value="#{pprBean.subsuburb}">
<f:selectItem itemLabel="Select Subsuburb" itemValue="" />
<f:selectItems value="#{pprBean.subsuburbs}" />
</p:selectOneMenu>
</h:panelGrid>
<p:separator />
<p:commandButton value="Submit" update="msgs"
actionListener="#{pprBean.displayLocation}"/>
</p:panel>
</h:form>
但永遠不會執行偵聽器函數#{pprBean.handleSuburbChange}
。我在另一個論壇看到,ajax響應中的動態代碼不包含其他tag屬性中的標籤,但我該怎麼做呢?
在PPRBean
代碼我添加:如果所選擇的項目不能被處理
@Named("pprBean")
@RequestScoped
public class PPRBean implements Serializable {
// ...
public void handleSuburbChange() {
if (suburb != null && !suburb.equals("")) {
subsuburbs = subsuburbsData.get(suburb);
} else {
subsuburbs = new HashMap<String, String>();
}
log.info("subsuburbs:" + subsuburbs);
}
// ...
你確定嗎?在這種情況下,爲什麼第二個SelectOneMenu會填充好值。我試過你的解決方案,但沒有看到改進。不過謝謝你的回答! – user1064716
因爲您使用了ajax,視圖將保持不變,但支持bean不同。如果它仍然不起作用,那麼也許你不是正確更新或使用對話範圍的ajax。它至少對我來說工作得很好。 – BalusC