【问题标题】:Not getting selected value from Dropdown in primefaces backing bean没有从primefaces支持bean中的下拉列表中获取选定的值
【发布时间】:2015-05-07 06:28:44
【问题描述】:

您好,我已经构建了两个连续的下拉列表,一个在 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);
    }
}

primefaces新手,请帮忙

【问题讨论】:

  • 您选择为 selectOneMenus 和 f:selectItem 使用相同的值看起来和感觉很奇怪(我想您正在尝试预先选择默认值?没有必要)。你可能想摆脱它。还要确保您的 bean 在渲染过程中没有被破坏和重新创建 - 检查您的 @PostConstruct 方法是否被多次调用

标签: jsf-2 primefaces


【解决方案1】:

对此的答案:“第二次设置空白..正如我在调试中发现的那样” 发生这种情况是因为我意识到我将相同的属性指向两个 ui 组件..如在..同一页面中的两个下拉列表链接到支持 bean 的相同属性..愚蠢的错误..因此第二次调用setter..with 空白值..因为它没有为第二个 UI 组件初始化

【讨论】:

    猜你喜欢
    • 2019-03-07
    • 1970-01-01
    • 2012-06-20
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多