1

t:dataTable の 1 つの列の下に t:dataList を含む rich:popupPanel があります。この dataList には h:commandLink があり、その中に f:param があります。richfaces 3.3 では問題なく動作していましたが、richfaces 4 に移行した後、動作しなくなりました。私がリッチ:ポップアップパネルの代わりにリッチ:モーダルパネルを使用していたという事実に言及するために。私はかなりの数のリンクを通過しました:

https://community.jboss.org/thread/202583

commandButton/commandLink/ajax アクション/listener メソッドが呼び出されていないか、入力値が更新されていません

しかし、助けにはなりません:(。何か不足していますか?現在、Beanはセッションスコープであり、データモデルをコンストラクターに入れることができないため、ゲッターを使用してデータモデルを取得しています。

誰かがそれについて考えているなら、私に知らせてください。

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」に変更すると、この問題が解決することがわかりました。でも奇妙な!マルチパート暗号化で機能しなかった理由がわかりません。

まず第一に、それは暗号化ではなく、エンコーディングです。違いはかなり大きいです。「暗号化」とは、セキュリティキー(暗号化キー、シードなど)がないと予測できない方法で値を変更する方法です。「エンコーディング」とは、データ転送メカニズムで受け入れられるように、および/またはデータを失うことなく反対側で認識/解析できるように値を変更する方法です。値は判読不能になることはなく、多少具体的で異なって配置されているだけです。

具体的な問題に戻ると、エンコーディングは通常、たとえばまたはRichFacesコンポーネントmultipart/formdataを使用して、フォームと一緒にファイルを送信(アップロード)できる必要がある場合にのみ使用されます。標準形式のエンコーディング。基本的に、リクエストパラメータをこの形式でURLエンコードして送信する必要があることを指定します。<input type="file"><rich:fileUpload>application/x-www-form-urlencoded

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の場合、これは通常、RichFaces4にないによって処理されorg.ajax4jsf.Filterます。

application/x-www-form-urlencodedはすでにHTMLフォームのデフォルトのエンコーディングタイプであることに注意してください。したがって、自分で明示的に指定する必要はありません。enctype属性を完全に省略してください。

<h:form>

</h:form>

そして、あなたはすべて設定されている必要があります。

于 2012-08-28T12:54:26.300 に答える
1

フォームのencTypeを「multipart/form-data」から「application/x-www-form-urlencoded」に変更すると、この問題が解決することがわかりました。でも奇妙な!マルチパート暗号化で機能しなかった理由がわかりません。

誰かがこれについて知っているなら、これの背後にある説明をまだ知りたいです。

于 2012-08-28T12:26:18.800 に答える
1

h:commandLink パス パラメータの代わりに a4j:commandLink を使用すると、この問題が解決されました。パラメータのためだけのカスタム フィルタは必要ありません。

于 2012-09-04T09:27:43.257 に答える
0

CommandButton は form タグに配置する必要があります。ネストされたフォームがあるか、フォームがないように聞こえます。

于 2012-08-28T10:16:18.983 に答える