我知道這個問題存在於SO中的其他地方,但無論是解決方案是舊的(和JSF似乎已經改善了很多),或者我無法使解決方案工作。根據組合值更改輸入
就像聽起來那麼簡單,我想根據組合框的值替換輸入元素的文本。我想使用Ajax,即使組合中只有一個元素(即默認情況下組合元素的選擇爲空),也希望這能夠工作。
<h:selectOneMenu id="fnamecombo" valueChangeListener="#{namesController.setForename(fnamecombo)}">
<c:forEach items="#{namesController.myForenames}" var="myforename">
<f:selectItem itemValue="#{myforename}" itemLabel="#{myforename}" />
</c:forEach>
<f:ajax render="fnameinput" />
</h:selectOneMenu>
<h:inputText value="#{namesController.forename}" id="fnameinput" />
這是行不通的。所以首先,我不知道如何調用setForename
方法。如果我使用valueChangeListener="#{namesController.setForename('xxxxx')}"
它可以工作,但只有第一次,如果組合中有多個元素,否則事件似乎不會被觸發。
什麼是簡單的修復?
編輯
好了,我已經取得了進展。這是比較容易比我預料的:
<h:selectOneMenu id="fnamecombo" value="#{namesController.forename}">
<c:forEach items="#{namesController.myForenames}" var="myforename">
<f:selectItem itemValue="#{myforename}" itemLabel="#{myforename}" />
</c:forEach>
<f:ajax render="fnameinput" />
</h:selectOneMenu>
<h:inputText value="#{namesController.forename}" id="fnameinput" />
這似乎對我手工創建一個selectItem
工作,但不是與該foreach
循環打印之一。因此,這是渲染代碼,在那裏我獲得「約翰」從環和我手動創建「示例」:
<select id="myForm:fnamecombo" name="myForm:fnamecombo" size="1" onchange="mojarra.ab(this,event,'valueChange',0,'myForm:fnameinput')">
<option value="example">example</option>
<option value="john">john</option>
</select>
它與「示例」而與「約翰」。
你可以用f:selectItems代替c:forEach –
對不起,我不明白。你是什麼意思?這是如何解決問題的? – user1156544
好吧,現在我明白你在說什麼了。我已將c:forEach更改爲f:selectedItems,但仍未獲得值。只有手動放置selectItem時,它似乎可以與它們一起工作。使用f:selectedItems只會刪除輸入字段。由於生成的代碼對於所有選項都是相同的,因此必須有其他東西丟失 – user1156544