JSF 2.0:为什么f:ajax发送所有表单字段而不仅仅是那些标有execute-attribute的字段?

时间:2010-10-08 11:09:09

标签: java jsf jsf-2

似乎我现在有一堆与JSF相关的问题......在这里再说一遍:为什么用f:ajax声明的AJAX调用发布了表单的所有字段,而不仅仅是{{1}声明的那些字段1}?这个问题was already asked在Sun论坛中,但由于它们现在已经关闭,我无法在那里回复。线程有一个存根,没有真正的答案。

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

3 个答案:

答案 0 :(得分:5)

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

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

  

“f:ajax不服从'execute'属性,但总是发送所有   表格中的字段。但是,Mojarra只处理列出的内容   假设的字段。但是,不应发送多余的字段,因为   它增加了请求大小。“

     

“状态:开放优先:主要”

答案 1 :(得分: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 =真

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

答案 2 :(得分:1)

我不是百分百肯定,但这可能是Mojarra的一个错误。请参阅a similar question about the special @all keyword

简而言之:Mojarra不遵守为execute的{​​{1}}属性输入的表格列表,但始终只提交附表。同样可能适用于更详细的字段级别 - Mojarra在选择要提交的字段时不遵守execute属性,而只是将它们全部发送。但是,它在服务器端处理数据时遵循execute属性。

任何人都可以通过Apache Myfaces测试行为是否与此不同?