JSF SelectOneMenu选中的项目

Pio*_*Pio 1 jsf selectonemenu

我无法从SelectOneMenu中获取所选项目.我向菜单提供了一个ArrayList,并希望用户选择其中一个.我把菜单放到一个表单中,所以我有一个commandButton,我打算用它来执行选择.这个实现给了我这个错误:当我从菜单"user3"中选择时,无法将类型为java.lang.String的user3转换为类java.util.ArrayList,因此它实际上正确地执行了选择.错误指的是这一行

<h:selectOneMenu value="#{user.myUsers}"
Run Code Online (Sandbox Code Playgroud)

这是我的xhtml中生成selectOneMenu的部分.

 <h:panelGrid columns="3">


                    <h:form>
                    <h:selectOneMenu value="#{user.myUsers}">
                        <f:selectItems value="#{user.myUsers }"/>
                    </h:selectOneMenu>
                    <h:commandButton value="#{msgs.remove_user}" action="#{user.select }" ></h:commandButton>
                    </h:form>
                    <h:outputText value="#{ user.select}"></h:outputText>
            </h:panelGrid>
Run Code Online (Sandbox Code Playgroud)

这是我的UserBean:

 @ManagedBean(name="user")
 @SessionScoped
public class UserBean implements Serializable {

private String selected;


public ArrayList<String> getMyUsers()throws Exception
{
    ArrayList<String> ret;
    MySQLConnection conn = new MySQLConnection();
    try{
        ret = conn.getMyUsers(name);
    }finally
    {
        conn.closeConnection();
    }
    return ret;
}

public String getSelect() throws Exception
{
     if (this.selected==null) return this.getMyUsers().get(0);

     return this.selected;  
}


public void setSelect(String s)
{
    this.selected = s;
}
}
Run Code Online (Sandbox Code Playgroud)

gaf*_*fcz 9

您的arraylist映射到

<f:selectItems value="#{user.myUsers}"/>, 
Run Code Online (Sandbox Code Playgroud)

在选择之后,您尝试将所选值放在同一个列表中:

<h:selectOneMenu value="#{user.myUsers}">
Run Code Online (Sandbox Code Playgroud)

你应该在managed bean链接到你的视图中有一些对象(或你的情况下的字符串),并用选定的项填充它myUsers.例如:

private String selectedUser; // + appropriate getter and setter
Run Code Online (Sandbox Code Playgroud)

<h:selectOneMenu>应该是这样的:

<h:selectOneMenu value="#{user.selectedUser}">
Run Code Online (Sandbox Code Playgroud)

选定的项目应存储在selectedUserjsf生命周期的末尾

  • 我找到了解决方案:我什么也没有返回(无效),所以它不会生成导航规则消息 (2认同)