1

Apache MyFaces JSF 2.0 を使用します。

XHTML コード:

<h:form id="searchUser" prependId="false">
    <h:selectManyListbox value="#{listManyBean.listUser}" id="userList"  size="10">
    <f:selectItems value="#{listManyBean.selListUser}"/> 
    </h:selectManyListbox>
    <h:commandButton id="clickGo" value="#{bundle.btn_login}"
     type="submit" 
    action="#{listManyBean.submitList}"/>
    <input type="button" value="Add" onclick="addUserToList();" />
</h:form>

リストに追加するスクリプト:

function addUserToList(){
     var UserListBox = document.getElementById('UserList');
     var UserNum = document.getElementById('UserNumber').value.toUpperCase();
     var UserOption = new Option(UserNum,UserNum);
     UserListBox.options[UserListBox.options.length] = UserOption;    
}

豆:

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.model.SelectItem;

@ManagedBean
@RequestScoped
public class ListManyBean {
    private List<String> listUser;
    private List<SelectItem> selListUser;

public List<SelectItem> getSelListUser() {
    return selListUser;
}


public List<String> getListUser() {
    return listUser;
}


public void setListUser(List<String> listUser) {
    this.listUser = listUser;
}

    public void submitList() {
        System.out.println("User List Value***" + this.listUser);
        System.out.println("User ListPan***++"+selListUser);
    }
}

1 つまたは複数のレコードを追加しても、常に null になります。ここで何がうまくいかないのか教えてください。

4

1 に答える 1

1

JSF を使用する代わりに JS を使用して新しい項目を追加しています。このようにして、JSF は新しい項目について何も知りません。この情報がサーバー側に送信されることは決してありません。

間違った JS アプローチを正しい JSF アプローチに置き換えます。

<h:form>
    <h:selectManyListbox value="#{bean.selectedUsers}" size="10">
        <f:selectItems value="#{bean.availableUsers}" /> 
    </h:selectManyListbox>
    <h:commandButton value="submit" action="#{bean.submit}" />
    <h:inputText value="#{bean.user}" />
    <h:commandButton value="Add" action="#{bean.add}">
        <f:ajax execute="@form" render="@form" />
    </h:commandButton>
</h:form>

@ManagedBean
@ViewScoped
public class Bean {

    private List<String> selectedUsers;
    private List<String> availableUsers = new ArrayList<String>();
    private String user;

    public void add() {
        availableUsers.add(user);
        user = null;
    }

    public void submit() {
        System.out.println("Selected users: " + selectedUsers);
        System.out.println("Available users: " + availableUsers);
    }

    // ...
}
于 2012-10-25T17:07:50.810 に答える