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

时间:2012-07-05 09:22:02

标签: ajax jsf richfaces popuppanel

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

2部分:

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

1 个答案:

答案 0 :(得分:2)

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

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

所以,也许您想要做的是在您要发送的表单中放置h:inputHidden,在第一个表单的h:selectOneMenu中重新呈现它,然后发送{{1}在表格上:

idUserHidden