【问题标题】:JSF 2.0: Why does f:ajax send all the form fields and not only those marked with execute-attribute?JSF 2.0:为什么 f:ajax 会发送所有表单字段,而不仅仅是那些标有执行属性的字段?
【发布时间】:2011-04-22 20:07:47
【问题描述】:

这几天好像我有一堆与 JSF 相关的问题……又来了:为什么用 f:ajax 声明的 AJAX 调用会发布表单的所有字段,而不仅仅是用 execute 声明的字段?这个问题was already asked 在 Sun 论坛中,但由于它们现在已关闭,我无法在那里回复。那里的线程有一个没有真正答案的存根。

如果我只需要使用其中的一部分,那么提交所有表单字段有什么意义?

【问题讨论】:

标签: java jsf jsf-2


【解决方案1】:

我刚刚检查了 Tuuka 在 2011 年 1 月发布的 JSF 票证。它说这种行为(提交所有表单字段)符合 JSF 规范,并且问题已关闭。

JSF 开发人员已发布规范更改通知,该通知应在即将发布的规范中进行修改。日期为 2013 年 1 月 31 日。https://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-1098

"f:ajax 不服从 'execute' 属性,但总是发送所有 表单中的字段。但是,Mojarra 确实只处理列出的 假定的字段。但是,不应发送多余的字段,因为 它会增加请求大小。”

“状态:开放优先级:专业”

【讨论】:

    【解决方案2】:

    这似乎是 jsf.js 中的一个错误 getViewState 函数返回所有参数(而不是过滤它们),然后在请求字符串中发送到服务器。

    示例: j_idt15 = j_idt15&j_idt15%3Avalue1 = 4444&j_idt15%3Avalue2 = 555&j_idt15%3Avalue3 = 6664&javax.faces.ViewState = -6275268178907195611%3A5276476001199934151&javax.faces.source = j_idt15%3Avalue1&javax.faces.partial.event =模糊&javax.faces.partial.execute = j_idt15%3Avalue1 %20j_idt15%3Avalue1&javax.faces.partial.render=value1out&javax.faces.partial.ajax=true

    在这里您可以看到即使 javax.faces.partial.execute 被正确指定为: j_idt15:value1,请求中仍然包含所有的值

    【讨论】:

    • 因此该错误存在于 javascript 级别 - 这就是它在 Java 级别中工作的原因(JSF 仅设置标记为 execute 的 bean 字段,尽管发送了所有字段)。请注意,该错误不仅与过滤正确的字段有关,如果execute 指定了两个或多个不同的表单,则仍仅发送包装表单中的字段。所以这是一个更大的问题。在正在进行的基础设施迁移之后,一旦它再次可用,我将在 Mojarra 跟踪器中为此提出请求。
    • 嗯,好像我很久以前就忘记接受这个了。马上挑选!
    【解决方案3】:

    我不是 100% 确定,但这可能是 Mojarra 中的一个错误。见a similar question about the special @all keyword

    简而言之:Mojarra 不遵守为f:ajaxexecute 属性输入的表单列表,但始终只提交封闭表单。这可能也适用于更详细的字段级别 - Mojarra 在选择要提交的字段时不遵守执行属性,而只是将它们全部发送。但是,在服务器端处理数据时,它确实遵循 execute 属性。

    谁能用 Apache Myfaces 测试行为是否与此不同?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 2012-11-23
      • 1970-01-01
      相关资源
      最近更新 更多