2012-10-25 17 views
1

使用Apache MyFaces JSF 2.0。selectManyListbox返回null

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); 
    } 
} 

我得到空始終,不論加入一種或一種以上一個記錄。 請讓我知道這裏出了什麼問題。

+0

代碼看起來很好至今。你的問題是其他地方引起的嘗試發佈自包含的代碼,以便我們只需將'不'任何修改*''''''''複製到空白環境中即可自行查看問題。 – BalusC

+0

很高興您將getters/setters添加到代碼中,但這是無關緊要的信息,因爲它通常會說明問題。我更關注的是代碼中的「添加一條或多條記錄」*,正如您的問題所述。請閱讀我們的JSF wiki頁面的「SSCCE」部分:http://stackoverflow.com/tags/jsf/info – BalusC

+0

@BalusC:包含添加到列表中的腳本 –

回答

1

您正在使用JS添加新項目而不是使用JSF。這樣JSF就不會知道任何有關新項目的信息。這些信息絕不會提交給服務器端。

由一個健全的JSF方法替換你的不對了JS的方法:

<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); 
    } 

    // ... 
} 
+0

@BaluC:謝謝你 –

+0

不客氣。 – BalusC