似乎我现在有一堆与JSF相关的问题......在这里再说一遍:为什么用f:ajax
声明的AJAX调用发布了表单的所有字段,而不仅仅是{{1}声明的那些字段1}?这个问题was already asked在Sun论坛中,但由于它们现在已经关闭,我无法在那里回复。线程有一个存根,没有真正的答案。
如果我只需要使用其中一些表单字段,那么提交所有表单字段的意义何在?
答案 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测试行为是否与此不同?