使用JSF菜单中的项目

时间:2012-02-07 03:58:26

标签: jsf-2

我猜这可能是一个菜鸟问题,但我很难找到答案。

我有一个从数组填充的菜单

<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)}"/>

2 个答案:

答案 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>

请注意,我使用了itemValueitemLabel,您可以阅读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?