我有富:popupPanel,它包含t:dataTable的一列下的t:dataList。这个dataList有h:commandLink,里面有f:param。它适用于richfaces 3.3但在迁移到richfaces 4之后,它停止了工作。提到我使用rich的事实:modalPanel代替rich:popupPanel那边。我经历了很多链接:
https://community.jboss.org/thread/202583
commandButton/commandLink/ajax action/listener method not invoked or input value not updated
但没有帮助:(。我错过了什么?目前,bean是会话范围的,我使用getter来获取数据模型,因为我无法将它放在构造函数中。
如果有人知道,请告诉我。
PS:呈现的HTML等价物如下所示。它有请求参数varPath,但在支持bean中我们将其作为null。
<a onclick="return myfaces.oam.submitForm('actionForm','actionForm:j_id0',null, [['varPath','/Link']]);" href="#" tabindex="-1" accesskey="">/Link</a>
答案 0 :(得分:4)
想出从“multipart / form-data”将表单的encType更改为“application / x-www-form-urlencoded”可以解决此问题。奇怪的是!不确定为什么它不适用于多部分加密。
首先,它不是加密,而是编码。差异非常大。 “加密”是一种以这种方式改变价值的方式,如果没有安全密钥(密码密钥,种子等),这种方式是不可预测的。 “编码”是一种以这样的方式改变值的方式,即数据传输机制可以接受它和/或它可以被另一方识别/解析而不丢失任何数据。这些价值不是不可读的,或者是某种东西,它们只是有些具体而且有所不同。
回到您的具体问题,multipart/formdata
编码通常仅在您需要能够与表单一起发送(上传)文件时使用,例如使用<input type="file">
或RichFaces <rich:fileUpload>
组件。标准application/x-www-form-urlencoded
表单编码,它基本上指定请求参数应以此格式进行URL编码
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
name1=value1&name2=value2&name3=value3
不适合传递文件内容。为此,应使用multipart/form-data
编码,基本上如下所示:
Content-Type: multipart/form-data;boundary=SOME_BOUNDARY
--SOME_BOUNDARY
content-disposition: form-data;name="name1"
content-type: text/plain;charset=UTF-8
value1
--SOME_BOUNDARY
content-disposition: form-data;name="name2"
content-type: text/plain;charset=UTF-8
value2
--SOME_BOUNDARY
content-disposition: form-data;name="name3"
content-type: text/plain;charset=UTF-8
value3
--SOME_BOUNDARY--
此格式允许在请求正文中包含完整文件内容的空间。
在JSF 2.0 / 2.1 Web应用程序中,multipart/form-data
个请求通常由自定义Filter
处理。对于RichFaces 3,这通常由RichFaces 4中缺少的org.ajax4jsf.Filter
处理。
请注意,application/x-www-form-urlencoded
已经是HTML表单的默认编码类型。所以你不需要自己明确指定它。只需省略enctype
属性:
<h:form>
</h:form>
你应该全力以赴。
答案 1 :(得分:1)
想出从“multipart / form-data”将表单的encType更改为“application / x-www-form-urlencoded”可以解决此问题。奇怪的是!不知道为什么它不适用于多部分加密。
如果有人知道这一点,仍然想知道这背后的解释。
答案 2 :(得分:1)
使用a4j:commandLink而不是h:commandLink正确传递参数解决了这个问题。不需要仅针对参数的自定义过滤器。
答案 3 :(得分:0)
CommandButton应放在表单标记中。听起来你有嵌套的表格,或者你没有表格。