0

我正在使用rich:popuppanel 组件并且在选择列表中填充值时遇到问题。

我的要求如下。

  1. 填充扩展数据表

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

  3. 单击分配按钮

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

问题是,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() 的方法。

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

谢谢!

4

1 回答 1

0

The problem seems to be the selection of the users. Without the code of the table and the checkboxes I cannot say whether you do it right or not. ViewScope should be sufficient.

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

This might be wrong though. Probably your checkboxes never get evaluated. Try to change @this to @form.

于 2013-08-19T09:23:29.003 回答