iGo*_*oDa 5 selectonemenu jsf-2 managed-bean
我正在jsf页面上测试组件"SelectOneMenu".我通过我的ManageBean(将从数据库中获取所有动物)以dinamically填充此组件.
我想知道是否有可能看到用户选择的那个"SelectOneMenu"(组合框),我正在尝试使用value ="#{animalsManage.animalSelect}",但它只在页面的开头调用.另外,我正在使用inputText来查看"SelectOneMenu"的选定内容的值.
我做错了什么?
JSF:
<body>
<ui:component>
<h:form>
<h:outputText value="Select one Mets File" />
<h:selectOneMenu id="combo" value="#{animalsManage.animalSelected}">
<f:selectItem itemLabel="Select..." noSelectionOption="true"/>
<f:selectItems value="#{animalsManage.allAnimals}" />
</h:selectOneMenu>
<h:inputText id="textbox" value="#{animalsManage.animalSelected }" />
</h:form>
</ui:component>
</body>
Run Code Online (Sandbox Code Playgroud)
ManageBean:
@ManagedBean
@ViewScoped
public class AnimalsManage implements Serializable {
@EJB
private AnimalsFacadeREST animalsFacadeREST;
private String animalSelected;
private List< SelectItem> selectAnimals;
public List<SelectItem> getAllAnimals() {
List<Animals> al = animalsFacadeREST.findAll();
selectAnimals = new ArrayList< SelectItem>();
int i = 0;
for (Animals animal: al) {
selectAnimals.add(new SelectItem(i, animal.getName()));
i++;
}
return selectAnimals;
}
public String getAnimalSelected() {
return animalSelected;
}
public void setAnimalSelected(String animalSelected) {
this.animalSelected = animalSelected;
}
}
Run Code Online (Sandbox Code Playgroud)
sku*_*sel 12
所提出的问题有许多解决方案.我在这里提出两个基本想法.
服务器端解决方案.只需<f:ajax>在您的内部附加标签<h:selectOneMenu>即可更新所选值并重新呈现用户的选择,例如
<h:selectOneMenu id="combo" value="#{animalsManage.animalSelected}">
<f:selectItem itemLabel="Select..." noSelectionOption="true"/>
<f:selectItems value="#{animalsManage.allAnimals}" />
<f:ajax execute="combo" render="textbox" />
</h:selectOneMenu>
<h:inputText id="textbox" value="#{animalsManage.animalSelected }" />
Run Code Online (Sandbox Code Playgroud)
如果你喜欢,你还可以通过指定做与阿贾克斯听众选择的元素一些自定义逻辑listener="#{animalsManage.performCustomAjaxLogic}"的<f:ajax>标签.
客户端解决方案.只需在基本更改事件中更新id ="textbox"的元素.所以,如果你使用jQuery解决方案将是
$('#combo').change(function() {
$('#textbox').val($('#combo').val());
});
Run Code Online (Sandbox Code Playgroud)
认为客户端解决方案将仅绑定输入组件的文本值.