为什么这个jsf / ajax代码没有提交值?

时间:2011-06-07 06:37:47

标签: html ajax jsf jsf-2

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

第一个表单包含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

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>