f:ajax-inside-rich:popupMenu无法从不同的表单执行组件

f:ajax-inside-rich:popupMenu无法从不同的表单执行组件,ajax,jsf,richfaces,popuppanel,Ajax,Jsf,Richfaces,Popuppanel,我有一个标签,里面我使用事件。因此,也需要有一个内部的。在我的ajax事件中,我需要从“主页”中获取一个值,因此我使用相应的:formid:elementid模式将其列在执行列表中,但这不起作用-侦听器方法中的值为null。代码如下: <h:form id="form"> ... <h:selectOneMenu id="selectUser" value="#{usersBean.user_id}" styleClass="combo

我有一个标签,里面我使用事件。因此,也需要有一个内部的。在我的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字段为空,没有选择的值。如何强制执行表单:selectUser元素,以便在侦听器方法中读取它的选定值

第2部分:


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

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

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

因此,您可能要做的是在要发送的表单中放置一个h:INPUTHIDEN,从第一个表单的h:SELECTONE菜单中重新给它排序,然后在表单上隐藏发送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>

谢谢,这很有效。第二部分你有答案吗?到目前为止,我只能覆盖selectOneListBox的大小atribute,如果usersBean.atribSelect.size<2,则将其设置为2。不客气!对不起,我本人从未使用过h:selectOneListBox。你应该问另一个问题,这样它会得到更多的关注。