我在这里嵌入了一个不适合我的代码的简化版本。这里发生的是有两种形式。
第一种形式包含一个最大化的<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
命令链接/按钮必须以与感兴趣的数据所在的相同的形式出现。
如果由于一些设计或业务限制,这不是一个选项,那么您需要第二个命令链接/按钮。首先将原始的commandlink/按钮移回正确的形式,给它一个id
,然后使用CSS display: none;
隐藏它。
然后把第二个命令链接/按钮放在另一种形式中,它可以做一些类似的事情
<h:commandLink onclick="document.getElementById('form_with_values_to_update:linkid').click(); return false;">
Do something
</h:commandLink>