Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 未从primefaces backing bean中的下拉列表中获取选定值_Jsf 2_Primefaces - Fatal编程技术网

Jsf 2 未从primefaces backing bean中的下拉列表中获取选定值

Jsf 2 未从primefaces backing bean中的下拉列表中获取选定值,jsf-2,primefaces,Jsf 2,Primefaces,嗨,我已经建立了两个连续的下拉列表,一个在init()方法中初始化,另一个在第一个选择的基础上填充 命令按钮用于使用两个选定值进行处理,奇怪的是,所选值的Setter被调用了两次(第二次设置为空..正如我在调试中发现的那样..我需要了解我为什么会得到空值 myPage.xhtml <p:selectOneMenu id="dbList" value="#{backingBean.selectedConnection}" style="width:200px">

嗨,我已经建立了两个连续的下拉列表,一个在init()方法中初始化,另一个在第一个选择的基础上填充

命令按钮用于使用两个选定值进行处理,奇怪的是,所选值的Setter被调用了两次(第二次设置为空..正如我在调试中发现的那样..我需要了解我为什么会得到空值

myPage.xhtml

<p:selectOneMenu id="dbList"
    value="#{backingBean.selectedConnection}"
    style="width:200px">
    <p:ajax listener="#{backingBean.onConnectionChange()}"
        update="aliasList" />
    <f:selectItem itemLabel="Select" itemValue="#{backingBean.selectedConnection}"
        noSelectionOption="false" />
    <f:selectItems value="#{backingBean.connectionsTypeList}" />
</p:selectOneMenu>
<p:outputLabel for="aliasList" value="Connection Alias" />
<p:selectOneMenu id="aliasList"
    value="#{backingBean.aliasSelected}" style="width:200px">
    <f:selectItem itemLabel="Select" itemValue="#{backingBean.aliasSelected}"
        noSelectionOption="false"/>
    <f:selectItems value="#{backingBean.connectionsList}" />
</p:selectOneMenu>
<p:commandButton value="myButton" 
    actionListener="#{backingBean.myMethod()}"
    id="myButton" />                                            

backingBean.java

@ManagedBean
@ViewScoped
public class BackingBean implements Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private ArrayList<String> connectionsList;
    private String aliasSelected;
    private String selectedConnection;
    private ArrayList<String> connectionsTypeList;

    @PostConstruct
    public void init() {
        // Initialize the connection alias drop down here
        this.connectionsTypeList = getConnectionTypeList();
        this.connectionsList=new ArrayList<String>();
    }

    public void onConnectionChange() {
        System.out.println("In Connection Change, populating aliases");
        getConnectionDBList();

    }
    public String getAliasSelected() {
        return aliasSelected;
    }
//Dont know why this is called twice on button click and second time value set is blank
    public void setAliasSelected(String aliasSelected) {
        this.aliasSelected = aliasSelected;
    }

    public ArrayList<String> getConnectionsList() {
        return connectionsList;
    }

    public void setConnectionsList(ArrayList<String> connectionsList) {
        this.connectionsList = connectionsList;
    }
    public String getSelectedConnection() {
        return selectedConnection;
    }

    public void setSelectedConnection(String selectedConnection) {
        this.selectedConnection = selectedConnection;
    }

    public ArrayList<String> getConnectionsTypeList() {
        return connectionsTypeList;
    }

    public void setConnectionsTypeList(ArrayList<String> connectionsTypeList) {
        this.connectionsTypeList = connectionsTypeList;
    }
    public void myMethod() {
        System.out.println("selected Alias is "+aliasSelected);
        System.out.println("selected connection is "+selectedConnection);
    }
}
@ManagedBean
@视域
公共类BackingBean实现了可序列化{
/**
* 
*/
私有静态最终长serialVersionUID=1L;
私有ArrayList连接列表;
选择私有字符串别名;
私有字符串选择连接;
私有ArrayList连接类型列表;
@施工后
公共void init(){
//初始化此处的连接别名下拉列表
this.ConnectionTypeList=getConnectionTypeList();
this.connectionList=newArrayList();
}
连接更改()上的公共无效{
System.out.println(“连接更改,填充别名”);
getConnectionBlist();
}
公共字符串getAliasSelected(){
返回选定的别名;
}
//不知道为什么在单击按钮时调用两次,而第二次值集为空
已选择公共空集合别名(已选择字符串别名){
this.aliasSelected=aliasSelected;
}
公共阵列列表getConnectionsList(){
返回连接列表;
}
public void setConnectionsList(ArrayList connectionsList){
this.connectionsList=connectionsList;
}
公共字符串getSelectedConnection(){
返回selectedConnection;
}
public void setSelectedConnection(字符串selectedConnection){
this.selectedConnection=selectedConnection;
}
公共阵列列表getConnectionsTypeList(){
返回connectionsTypeList;
}
public void setConnectionsTypeList(ArrayList connectionsTypeList){
this.connectionsTypeList=connectionsTypeList;
}
公共方法(){
System.out.println(“所选别名为”+所选别名);
System.out.println(“所选连接为”+所选连接);
}
}
primefaces新手,请帮助回答:“第二次设置为空..正如我在调试中发现的那样”
发生这种情况是因为我意识到我将同一属性指向两个ui组件..如..同一页面中的两个下拉列表链接到了支持bean的同一属性..愚蠢的错误..因此第二次调用setter..使用空值..因为它没有为第二个ui组件初始化

您选择使用相同的值对于SelectOne菜单和
f:selectItem
的外观和感觉都很奇怪(我猜您是在尝试预选默认值?没有必要)。你可能想摆脱它。还要确保bean在渲染过程中没有被破坏和重新创建-检查
@PostConstruct
方法没有被调用多次