1

我有rich: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 操作/侦听器方法或未更新输入值

但没有帮助:(。我错过了什么吗?目前,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>
4

4 回答 4

4

发现将表单的 encType 从“multipart/form-data”更改为“application/x-www-form-urlencoded”可以解决此问题。不过很奇怪!不知道为什么它不适用于多部分加密。

首先,它不是加密,而是编码。差异是相当大的。“加密”是一种以这种方式更改值的方式,这种方式在没有安全密钥(密码密钥、种子等)的情况下是不可预测的。“编码”是一种以数据传输机制可以接受和/或另一方可识别/可解析而不会丢失任何数据的方式更改值的方式。这些值并没有变得不可读或其他什么,它们只是被安排得有些具体和不同。

回到您的具体问题,multipart/formdata编码通常仅在您需要能够与表单一起发送(上传)文件时使用,例如使用<input type="file">RichFaces<rich:fileUpload>组件。标准的application/x-www-form-urlencoded表单编码,它基本上规定了请求参数应该以这种格式发送 URL-encoded

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,这通常由org.ajax4jsf.FilterRichFaces 4 中缺少的 处理。

Note that the application/x-www-form-urlencoded is already the default encoding type of HTML forms. So you don't need to explicitly specify it yourself. Just omit the enctype attribute altogether:

<h:form>

</h:form>

and you should be all set.

于 2012-08-28T12:54:26.300 回答
1

发现将表单的 encType 从“multipart/form-data”更改为“application/x-www-form-urlencoded”可以解决此问题。不过很奇怪!不知道为什么它不适用于多部分加密。

如果有人知道这一点,仍然想知道这背后的解释。

于 2012-08-28T12:26:18.800 回答
1

Using a4j:commandLink instead of h:commandLink pass parameters correctly which resolved this issue. No need for custom filters just for parameters.

于 2012-09-04T09:27:43.257 回答
0

CommandButton 应放置在表单标记中。听起来你有嵌套形式或者你没有形式。

于 2012-08-28T10:16:18.983 回答