2010-12-10 5 views
1

URLに渡されたパラメータに問題があります。 があるということ、/struts/MyAction.action?param=foo%40bar.comStruts 2.0.14 GETパラメータがURLデコードされていない、それはバグですか?

アクションフィールドが「PARAM」フィールドセットに「FOO%40bar.com」を取得します。

レッツは、要求があると言いますバグやStrutsからあまりにも多くを期待していますか?

私の直感では、「[email protected]」という値を取得する必要があることを私に教えています。たとえば、POSTフォームフィールドとしてそのパラメータを渡すと起こります。

私はデフォルトのインターセプタスタックを使用しています。私のアクションクラスはActionSupportを拡張しています。私はWebSphere6.1のいくつかの動作を得ます。& GlassFish2.1。

おかげ


こんにちは再び、

問題は、プロキシの実装のバグによって引き起こされました。 Webアプリケーションの前に立っていたカスタムプロキシサーバーを作成しました。 2回目のURLパラメータをエンコードしていたので、Strutsでは@の代わりに%40がありました。 バグが修正され、パラメータが正しく渡されています。私はStruts2のパラメータを復号化するための責任があるとは思わないが、むしろ、サーブレット・コンテナは、例えばある

答えて

2

すべてのあなたの助けを

感謝Tomcat、Jettyなど

0

パラメータに関する問題はありますか? paramフィールドが設定されることを希望していたのは何ですか?

ActionプロパティをStrutsのやり方とは異なる方法で変換したい場合は、カスタムタイプコンバータを記述することができます。

1

あなたの直感は正しいです、あなたは "[email protected]"を得ているはずです。次のstrutsバージョン2.0.14のテストでは、@#$#$^$ &%#$%&をfromに入力して別のページに問題なく表示することができました。

私は、文字列を取る形で裸の骨ストラット2.0.14アプリケーションをテストした:

<s:form action="form-view.action" method="GET"> 
    <s:textfield label="email" name="email"/> 
    <s:submit/> 
</s:form> 

基本的なアクションクラス(あなたがセッター/ゲッターを必要としないこのバージョンでstuts2に注意してください):

package struts2; 

import com.opensymphony.xwork2.ActionSupport; 

public class FormViewAction extends ActionSupport{ 
    public String email; 
} 

そして含む非常に基本的な表示ページ:

<s:property value="email"/> 

をここではstruts.xですml:

​​

mavenでビルドしていますか? 2.2.1の代わりにバージョン2.0.14を使用しているのはなぜですか?ちょうど私がテストアプリケーションを2.2.1から2.0.14にダウングレードして、これは私の約5分かかりました。私はあなたに最新の文書を与える現行バージョンにアップグレードすることに重大な障害があるとは思わない。

これをGlassfish 3.0.1で実行しました。

mavenでビルドしていない場合は、ライブラリ内のjar、web.xmlおよびstruts.xmlファイル、可能であれば最小限のform.jsp、display.jsp、および問題を再現するActionクラスをリストしてください。

+0

フィールドをパブリックとして公開するのではなく、ゲッターとセッターを使用する必要があります。これはJavaの一般的なベストプラクティスです。 –

+0

strutsでは、検証メソッドで検証を行うことになっていますが、getterとsetterはget/set以外には何もしません。パラメータの制約も他の場所で処理されます...アクションのクラスは薄いので、そのような(と本当に簡単にIDEのリファクタリングで)。一般的には良いアイデアですが、私がアクションを行う方法は、その効果はかなり抽象的に見えますが、それを加えないと読みやすさが向上します。 OTちょうどFYI、休止状態は、(バイトコードの書き換えを介して)プライベートフィールドの設定がエキゾチックな話をすることさえできます!私はget/setが「ベストプラクティス」であることに同意しますが、必ずしもベストではありません。 – Quaternion

+1

こんにちは、それは実際にフォームではなく、生成された電子メールのアクションへのリンクです。クラスパスは大丈夫だと思われ、ログには何の心配もありません。私はStruts 2.2.1を試し、何か変更があるかどうかを確認します –

0

サーモレットコンテナは、radoが示されているので、HttpServletRequestのパラメータ値のデコードを担当します。値がURLデコードされていない場合は、何かがオフになっています。

Servlet Tutorial: Handling Form Data

まず、あなたはどのようなサーブレットAPIのバージョンを使用していますか? 2.5? 2.4?使用しているバージョンのweb.xmlに正しいXSDスキーマが定義されていますか?また、使用しているバージョンがアプリケーションサーバーによって提供されているバージョンと一致していることを確認してください。

関連する問題