我在这里嵌入了一个不适合我的代码的简化版本。 这里发生的是有两种形式。
第一个表单包含ajaxified <h:commandLink>
(使用<f:ajax>
)
第二个表单包含一个带有值的表单。
当按下<h:commandLink>
时,应该提交第二种形式的值。
实践中发生的是检索值(运行getter函数)但未提交(setter函数永远不会运行)。
<f:ajax>
运行是因为我可以看到侦听器方法正在运行,第二个表单在单击<h:commandLink>
后会被重新呈现,但同样,setter函数永远不会运行。
<body>
<h:form prependId="false">
<h:panelGroup >
<h:commandLink >
<f:ajax event="click"
execute=":form_with_values_to_update" render=":form_with_values_to_update"
listener="#{mrBean.clickListenerAction}" />
Do something
</h:commandLink>
</h:panelGroup>
</h:form>
<h:panelGroup>
<h:form id="form_with_values_to_update">
<fieldset>
<ui:repeat value="#{mrBean.aMemberOfBean.aListInAMemberOfBean}" var="listItem">
<h:panelGroup>
<h:outputText value="#{listItem.label}" />
<h:inputText id="contact_details_input"
value="#{listItem.value}" />
</h:panelGroup>
</ui:repeat>
</fieldset>
</h:form>
</h:panelGroup>
</body>
P.S - 使用MyFaces JSF 2.1
答案 0 :(得分:3)
命令链接/按钮必须与感兴趣的数据所在的相同形式一致。
如果由于某些设计或业务限制而不是一个选项,那么您需要第二个命令链接/按钮。首先将原始的commandlink /按钮以正确的形式移回,给它id
并使用CSS display: none;
隐藏它。
然后将第二个commandlink /按钮放在另一个形式的
中<h:commandLink onclick="document.getElementById('form_with_values_to_update:linkid').click(); return false;">
Do something
</h:commandLink>