1

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

    <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字段为空(没有选择的值)。如何强制执行 form:selectUser 元素,以便我可以在侦听器方法中读取它的选定值?

第2部分:

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

4

1 回答 1

2

这是预期的行为,您真的不能在表单之外提交任何数据。

您可以在表单外重新呈现 JSF 组件(请参阅本文),但您不能将表单外的任何内容发送到服务器。

因此,也许您想要做的是h:inputHidden在您要发送的表单中放置一个,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>
于 2012-07-05T12:00:21.520 回答