我猜这可能是一个菜鸟问题,但我很难找到答案。
我有一个从数组填充的菜单
<f:selectItems value="#{quizBean.categoryArray}"/>
我需要将所选菜单项存储在名为tempCategory的QuizBean中的值中。我有一个名为setTempCategory(String newValue)和getTempCategory()的tempCategory的getter和setter。
我需要填写selectOneListbox的值。 quizBean.tempCategory指的是tempCategory的set方法。我将用什么替换newValue以便将菜单项发送到setTempCategory(String newValue)方法?
<h:selectOneListbox value="#{quizBean.tempCategory(newValue)}">
<f:selectItems value="#{quizBean.categoryArray}"/>
</h:selectOneListbox> <br/>
<h:commandButton value="Choose Quiz" action="#{quizBean.chooseCategory(quizBean.getTempCategory)}"/>
答案 0 :(得分:1)
您的关闭,这是您应该做的事情,请注意我每次更改下拉菜单的值时都希望将值提交给bean <f:ajax>
。
<h:selectOneListbox value="#{quizBean.tempCategory}">
<f:selectItems value="#{quizBean.categoryArray}" var="category" itemValue="#{category.id} itemLabel="#{category.displayName}" />
<f:ajax render="id_of_what_you_want_to_be_rerendered" />
</h:selectOneListbox>
请注意,我使用了itemValue
和itemLabel
,您可以阅读here它们的用途,但基本上,ID
将传递给selectOneListBox
的值1}}和label
将显示在用户界面中。
bean代码应该包含以下代码:
@ManagedBean
@SessionScope // (for example...)
public class QuizBean {
private String tempCategory; // will store Id of current category
public String getTempCategory() {
return tempCategory;
}
public setTempCategory(String pTempCategory) {
tempCategory = pTempCategory;
}
List<Category> CategoryArray;
// .. Getter and Setter for CategoryArray
}
如果您使用<f:ajax>
,则提交按钮是多余的。如果您想使用提交按钮,只需将其添加回来并删除<f:ajax>
。
答案 1 :(得分:0)
实际上JSF会自动调用特定属性的getter / setter。所选值设置为tempCategory,您不必将newValue传递给它。它将调用EL表达式中的getter进行操作。
<h:selectOneListbox value="#{quizBean.tempCategory}">
<f:selectItems value="#{quizBean.categoryArray}"/>
</h:selectOneListbox> <br/>
<h:commandButton value="Choose Quiz" action="#{quizBean.chooseCategory(quizBean.tempCategory)}"/>
但是请记住传递行动方法的论据,你需要el-api-2.2和el-impl-2.2罐子,正如BalusC提到的这个问题How to pass method arguments to an ActionListener?