代码之家  ›  专栏  ›  技术社区  ›  Evan Knowles

在execute中使用特定id的Ajax submit仍然提交整个表单

  •  1
  • Evan Knowles  · 技术社区  · 7 年前

    据我所知,在 execute f:ajax 标记应限制发布到服务器的字段。

        <h:form>
            <h:inputText id="one" value="#{manageSettingsBean.testOne}"/>
            <h:inputText id="two" value="#{manageSettingsBean.testTwo}"/>
    
            <h:commandButton value="Multi test" action="#{maintainEntityAction.multi(manageSettingsBean.testOne, manageSettingsBean.testTwo)}">
                <f:ajax execute="@this one"/>
            </h:commandButton>
        </h:form>
    

    在这种情况下,我希望只有第一个 inputText

    然而,在检查Chrome的网络选项卡中的表单数据时,我看到了

    j_idt13=j_idt13&j_idt13%3Aone=One&j_idt13%3Atwo=Two&javax.faces.ViewState=-8624538035389330252%3A2147742525648157763&javax.faces.source=j_idt13%3Aj_idt14&javax.faces.partial.event=click&javax.faces.partial.execute=j_idt13%3Aj_idt14%20j_idt13%3Aone&javax.faces.behavior.event=action&javax.faces.partial.ajax=true

    其中包含两个组件,以及它们的默认值(共个) "One" "Two" ).

    j_idt13:one=One
    j_idt13:two=Two
    

    第一个组件在 javax.faces.partial.execute ,因此它是唯一一个更新的字段,但这两个字段似乎都已提交。我将部分提交作为大型表单的一部分,以避免张贴太多数据,但如果整个表单仍在提交中,好处似乎会丢失?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Kukeltje    7 年前

    这个 execute 属性是否与字段提交无关。它会影响它们在服务器上的处理。因此,在这方面,你的期望是错误的,一切都按预期进行。

    PrimeFaces引入了 partialSubmit 为此,使用他们的 process 属性(其对应项 处决 )限制实际提交的内容。

    基于此,我为另一个问题创建了一些代码 <f:ajax render="@none" execute="@this"> and reducing submitted post data size in large form 这使得这项工作在普通JSF上也可以进行,同时我提交了一个 feature request to OmniFaces 将相同的功能添加到OmniFaces o:form . 他们对其进行了一些改进,并将其添加到即将发布的版本中,您可以作为 3.0-SNAPSHOT