为什么这个 JSF/AJAX 代码不提交值?



我在这里嵌入了一个不适合我的代码的简化版本。这里发生的是有两种形式。

第一种形式包含一个最大化的<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>

相关内容

  • 没有找到相关文章

最新更新