2012-07-05 39 views
1

我有一个<rich:popupPanel>标签,里面使用了<f:ajax>事件。因此<rich:popupMenu>也需要在其内部有一个<h:from>。在我的ajax事件中,我需要获取'主页'的值,因此我将它列在执行列表中,并带有相应的:formid:elementid模式,但这不起作用 - 该值在侦听器方法中为null。这里是代码:f:ajax里面rich:popupMenu不能执行不同形式的组件

<h:form id="form"> 
     ... 
     <h:selectOneMenu id="selectUser" value="#{usersBean.user_id}" styleClass="comboBoxes" > 
      <f:selectItems value="#{usersBean.myModelUsersValues}" /> 
      <a4j:ajax event="valueChange" listener="#{usersBean.userSelected}" render="login password customer_name" execute="@this"/>  
     </h:selectOneMenu > 
     ... 
    </h:form> 
    <rich:popupPanel id="popup" modal="true" autosized="true" resizeable="false"> 

    <f:facet name="header"> 
     <h:outputText value="Atributes" /> 
    </f:facet> 
    <f:facet name="controls"> 
     <h:outputLink value="#" onclick="#{rich:component('popup')}.hide(); return false;"> 
      X 
     </h:outputLink> 
    </f:facet> 
    <h:form id="popupForm"> 
      ... 
      <h:selectOneListbox id="atrib_list" value="#{usersBean.atribSelect}" styleClass="comboBoxes" style="height:100px;width:100px;"> 
         <f:selectItems value="#{usersBean.atribValues}" /> 
         <f:ajax event="valueChange" listener="#{usersBean.atribValuesChanged}" render="child_list" execute="@this :form:selectUser"/>       
      </h:selectOneListbox > 
      ... 
    </h:form> 
    </rich:popupPanel> 

usersBean.atribValuesChanged侦听器方法的usersBean.user_id字段为空(不具有被选择,该值)。我如何强制执行表单:selectUser元素,以便我可以在我的侦听器方法中读取它的选定值?

第2部分:

这仅仅是一个BTW。问题,也许我应该为此打开另一个线程。问题是当<h:selectOneListBox>只有一个值时,它更像h:selectOneMenu。这看起来很糟糕,并且当您选择它时valueChange事件不会被触发。 <h:selectManyListBox>中不存在此问题是否是一个错误?它可以修复吗?

回答

2

这是预期的行为,您实在无法在表单外提交任何数据。

您可以将表单之外的JSF组件重新渲染(请参阅此文章),但不能将表单外的任何内容发送到服务器。

所以,也许你想要做的是把一个​​你要发送的表单中,在h:selectOneMenu从第一种形式重新描绘它,然后在表格上发送idUserHidden

<h:form id="form"> 
    ... 
    <h:selectOneMenu id="selectUser" value="#{usersBean.user_id}" 
     styleClass="comboBoxes" > 
     <f:selectItems value="#{usersBean.myModelUsersValues}" /> 
      <!-- rerender the hidden input also: --> 
      <a4j:ajax event="valueChange" listener="#{usersBean.userSelected}" 
      render="login password customer_name :idUserHidden" execute="@this"/>  
    </h:selectOneMenu > 
    ... 
</h:form> 
.... 
<h:form> 
    .... 
    <!-- hidden input to submit the same value of :selectUser --> 
    <h:inputHidden id="idUserHidden" value="#{usersBean.user_id}" /> 

    <h:selectOneListbox id="atrib_list" value="#{usersBean.atribSelect}" 
     styleClass="comboBoxes" style="height:100px;width:100px;"> 
     <f:selectItems value="#{usersBean.atribValues}" /> 
     <f:ajax event="valueChange" listener="#{usersBean.atribValuesChanged}" 
      render="child_list" execute="@this idUserHidden"/>       
     </h:selectOneListbox > 
</h:form> 
+0

感谢这工作。你有第二部分的答案吗?到目前为止,我只能覆盖selectOneListBox的大小属性,并将其设置为2,如果usersBean.atribSelect.size()<2。 – 2012-07-05 12:47:00

+0

不客气!对不起,我从来没有用过'h:selectOneListBox'。你应该为此提出另一个问题,以便得到更适当的关注。 – elias 2012-07-05 12:49:35