我知道这个问题存在于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