我有一个<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>
中不存在此问题这是一个错误吗?它可以修复吗?
答案 0 :(得分:2)
这是预期的行为,您实际上无法在表单外提交任何数据。
您可以在表单外部重新呈现JSF组件(请参阅此文章),但不能将表单外的任何内容发送到服务器。
所以,也许您想要做的是在您要发送的表单中放置h:inputHidden
,在第一个表单的h:selectOneMenu
中重新呈现它,然后发送{{1}在表格上:
idUserHidden