如何动态填充选择列表右侧值

时间:2013-08-17 11:54:26

标签: richfaces view-scope popuppanel picklist

我正在使用rich:popuppanel组件,并且在选项列表中存在填充值的问题。

我的要求如下。

  1. 填充扩展数据表

  2. 使用复选框选择行 - 该行中的用户ID将传递给支持bean

  3. 点击指定按钮

  4. 弹出式面板应打开一个包含所有用户和指定用户的选项列表

  5. 问题是,getAllUsers()调用返回所有用户,并且正确填充了选项列表的左侧。但是根本没有调用getAssignedUsers()。因此,选择列表的右侧始终为空。

    XHTML代码如下。

    <h:form id="audit">
    ...
       <h:commandButton id="Assign" value="Assign"
          immediate="true" action="#{userBean.getSelectedUsers}">
            <f:ajax execute="@this" render="popupScript" />
       </h:commandButton>
       <h:panelGroup id="popupScript">
                <h:outputScript rendered="#{userBean.assignClicked}">
                    #{rich:component('assignUser')}.show();
                </h:outputScript>
       </h:panelGroup>
    ...
    </h:form>
    <rich:popupPanel id="assignUser" autosized="true" resizeable="false">
               <f:facet name="header">
                    <h:outputText value="#{msg.assignPopupHeader}">
                    </h:outputText>
               </f:facet>
               <h:form name="assign" id="assign">
                     <h:panelGrid cellspacing="5" id="popupGrid">
                          <a4j:outputPanel id="a4jPanel">
                                 <rich:pickList value="#{userBean.assignedUsers}"
                                         showButtonsLabel="false" sourceCaption="Available Users"
                                         align="center" targetCaption="Assigned Users" listWidth="165px"
                                         listHeight="100px" orderable="true" addText="&gt;" removeText="&lt;">
                                      <f:selectItems value="#{userBean.allUsers}" />
                                 </rich:pickList>
                          </a4j:outputPanel>
                          <center>
                                 <h:panelGrid columns="2" cellspacing="3" cellpadding="4">
                                         <a4j:commandButton id="assign" value="#{msg.userAssign}" 
                                                     action="#{userBean.assignUser}"/>
                                         <h:commandButton value="#{msg.userCancel}"
                                                     onclick="#{rich:component('assignUser')}.hide();return false">
                                         </h:commandButton>
                                </h:panelGrid>
                          </center> 
                  </h:form>
    </rich:popupPanel>
    

    我的理解是问题是由于bean的范围。我的bean是视图范围的,因此在初始化bean时,左侧和右侧面板中的数据都是预先填充的。

    @PostConstruct
    public void init() {
    
        setAllUsers(userService.getAllUsers());
        setAssignedUsers(userService.getAllAssignedUsers(userBean.getSelectedIdforAssign())); 
    }
    

    我尝试在init()本身中使用硬编码的id调用setAssignedUsers()。它工作正常。 我需要的是一种动态传递ID并调用getAssignedUsers()的方法。

    请建议如何执行此操作以及如何在打开弹出窗口时重新列出选项列表。

    谢谢!

1 个答案:

答案 0 :(得分:0)

问题似乎是用户的选择。 如果没有表格和复选框的代码,我不能说你是否做得对。 ViewScope就足够了。

<f:ajax execute="@this" render="popupScript" />

但这可能是错的。可能你的复选框永远不会被评估。尝试将@this更改为@form。