2016-11-10 4 views
0

項目の編集を許可するフォームに空のフィールドがある場合、Strutsアクションは呼び出されません。 freeMarkerテンプレートでカスタマイズされたページ。呼び出しはインターセプタに到着し、正常に渡された後、アクションメソッドを呼び出す前にドロップされます。このため、何が間違っているか把握するためのエラーメッセージは表示されません。 フィールドが空でない場合、アクションが実行され、アイテムが更新されます。Struts 2アクションが呼び出されない

これはインターセプターのStruts設定ですが、問題はないようです。

<interceptors> 
    <interceptor name="loginInterceptor" class="login.interceptor.LoginInterceptor" />  
    <interceptor-stack name="appStack"> 
     <interceptor-ref name="defaultStack"/> 
     <interceptor-ref name="loginInterceptor"/> 
    </interceptor-stack> 
</interceptors> 
<default-interceptor-ref name="appStack" /> 

そして、これが小さい内部にあるので、これは別の不可解な要因がある

<action name="upDate" method="upDate" class="com.coll.Item"> 
    <result name="success">jsp/item.jsp</result> 
    <result name="input">jsp/item.jsp</result> 
</action> 

item.ftlのフィールドがこの

<tr>   
    <td>Prior Order Number</td> 
    <td><@s.textfield name="item.prevOrdNum" id="prevOrdNum" theme="simple"/></td> 
</tr> 

のように見えますStruts.xmlでアクションですアプリケーションは何年も更新されていませんが、この問題は数週間前に始まりました。 Webページでそのフィールドを完全に削除した場合、またはデータベースにフィールドの値を格納して、ロード時に空でないようにすると、更新が処理されます。私は、何が起こっているのかを説明できるアイデアに感謝します。あなたが最も可能性の高い次のいずれかの場合に終了している

+0

あなたが指定したコードは、あなたにアイデアを伝えるのに十分なだけ、あなたはそれを推測し解決することはできません。 –

答えて

1

  • 変換エラー、あなたの変数はプリミティブ数であり、あなたが許可されていないヌルを送っているので、 、または
  • 検証エラーです。フィールドがnullであってはならないことを指定する若干の検証(validate()メソッド、XML、注釈など)があるためです。あなただけでは間違っていないが、同じJSPページにマッピングされたこと

In either case, the Workflow interceptor will return an INPUT resultは、INPUTSUCCESS結果との間に1が返されたかを知るには十分ではありません。

変換エラーとフィールド検証エラーは、FieldErrorsマップではなく、ActionErrorsマップ(ページ上部に<s:actionerror /> tagで印刷されている可能性があります)ではなく、エラーメッセージを運んでいます。

デフォルトのテーマでは、XHTML、すべてfieldErrorが、それが属するフィールドの近くに印刷されます。あなたはタグのためにsimpleテーマを使用しているため、フィールドエラーは自動的には印刷されません。

次の2つの選択肢があります。

  1. 印刷するページの上部にあるすべてのフィールドのエラー:

    <style type="text/css"> 
        .error { border: 5px solid red; } 
    </style> 
    
    <@s.if test="hasFieldErrors()"> 
        <div class="error"> 
         <@s.fielderror /> 
        </div> 
    </@s.if> 
    
  2. または手動であなたのフィールドへ<s:fielderror/> tags添付:

    <tr>   
        <td>Prior Order Number</td> 
        <td> 
         <@s.textfield name="item.prevOrdNum" id="prevOrdNum" theme="simple"/> 
         <@s.fielderror fieldName="item.prevOrdNum" /> 
        </td> 
    </tr> 
    
+0

2番目の提案を試した後、item.prevOrdNumメッセージの無効なフィールド値が表示されます。それはフィールド型をStringに変更したときに消えてしまったため、Integerに変換しようとしたときに発生します。しかし、私はそれを削除し、それがまだ発生したため、提出前に発生したフォームのバリデーションに由来していません。私はこのフィールドの '@Column(nullable = false)'アノテーションを持っていないので、いつ、なぜそれが起こるのかが分かりません。 – rmaitipe

+0

私はこれを答えとして受け入れるつもりです。なぜなら、問題の元の範囲を満たし、解決策を見つけるのが間違っているかどうかを私に指示したからです。私のサーバー側の変数は「整数」なので、それは問題ではありません。最終的には、フィールドをStringに変更し、入力が数値であることを確認するための検証を追加することで問題を回避しました。 – rmaitipe

関連する問題