2012-02-07 51 views
0

我猜这可能是一个noob问题,但我很难找到答案。在JSF菜单中使用项目

我具有被从阵列

<f:selectItems value="#{quizBean.categoryArray}"/> 

我需要所选择的菜单项存储在被称为tempCategory在QuizBean一个值填充的菜单。我有一个名为setTempCategory(String newValue)和getTempCategory()的tempCategory getter和setter。

我需要填写selectOneListbox的值。 quizBean.tempCategory引用tempCategory的设置方法。我会用什么来替换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

所有这些都在字符串中。我需要获取所选菜单项的字符串值,并将其存储在可以使用chooseCategory()方法检索它的地方。 – bilestrojanman 2012-02-07 05:12:03

回答

0

其实JSF会自动调用特定属性的getters/setters。所选值设置为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?

1

您密切提到,这里是你应该做的,请注意,我添加了一个<f:ajax>,以便在每次更改下拉菜单的值时将值提交给bean。我用itemValueitemLabel

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

公告,你可以阅读here他们是但基本上,该ID将被传递给selectOneListBox的价值和label将显示在用户界面的东西。如果你使用<f:ajax>然后提交按钮是多余的

@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 
} 

bean的代码应该有这样的代码。如果您想使用提交按钮,只需将其添加回去并删除<f:ajax>