2

私は 2 つのクラスを持っています。1 つは Action クラスMyActionで、もう 1 つは POJO クラスUserです。内部では、クラスMyActionの getter-setter を作成しました。User

次にindex.jsp、ユーザー入力用のページがあります。ここでは、クラスに格納されているプロパティにstruts 2pushタグを使用しています。User次のようになります。

<s:form action="go" method="post">
    <s:push value="user">
        <s:textfield name="id" label="usr-id"/>              <!-- user.id    -->
        <s:textfield name="fname" label="first-name"/>       <!-- user.fname -->
    </s:push>
    <s:submit/>
    <s:token/>
</s:form>

しかし、私はエラーが発生しています。Userプッシュ タグを削除し、プロパティの前に を付けるとuser、問題なく動作します。私が間違っている場所とpush、フォームの入力フィールドにタグを使用する方法を教えてください。

4

3 に答える 3

1

コードは問題ないように見えますが、テキストフィールドから値を送信するには、userオブジェクトをスタックに再度プッシュする必要があります。インターセプターがアクションを設定する前に、paramsインターセプターを使用して実行することをお勧めします。同じことがmodelDriveninterceptorを行っています。

モデル駆動型インターセプターはアクションを監視しModelDriven、アクションのモデルをtop値スタックに追加します。

注:パラメータをモデルに適用する場合は、 をModelDrivenInterceptorbothStaticParametersInterceptorとの前に指定する必要があります。ParametersInterceptor

注:ModelDrivenInterceptor、モデルが でない場合にのみモデルをスタックにプッシュしますnull。それ以外の場合は無視されます。

ビューとコントローラーのモデルをプッシュするモデル駆動型アプローチを使用できます。最後はコードにありません。

ModelDrivenアプローチの使用例

于 2014-10-09T10:03:05.387 に答える
1

<s:push><s:set/>、または属性<s:iterator>を使用するかどうかに関係なく... :varIteratorStatus

  • 値を示すには、どのような方法でも構いません。
  • 値を送信する唯一nameの方法は、属性に完全な「パス」を指定することです。

たとえば、プッシュされたオブジェクトを value 属性で使用できますが、送信時にそれを機能させるには、userin name 属性を配置する必要があります。

<s:push value="user">
    <s:textfield name="user.id" value="id"      />       <!-- user.id    -->
    <s:textfield name="user.fname" value="fname"/>       <!-- user.fname -->
</s:push>

これにより、<s:push>あなたのケースでの使用はまったく役に立たなくなります。

ただし、ソースと宛先が異なるユースケースでは、たとえば. ActionSource から読み取りuser.fname、その値を文字列で ActionDestination に送信するとselectedFname、jsp は次のようになります。

<s:push value="user">
    <s:textfield name="selectedId"    value="id"   />       <!-- user.id    -->
    <s:textfield name="selectedFname" value="fname"/>       <!-- user.fname -->
</s:push>

だから、それは「何か役に立つ」ことをしたでしょう。

しかし、私の経験に基づくと、プッシュを使用することはほとんどありません。必要な場合は、データ構造が複雑すぎる可能性があります。

于 2014-10-09T08:57:14.107 に答える
0

プッシュは ui タグではありません。プッシュは、オブジェクトを値スタックの一番上に置くために使用されます。オブジェクトがスタックの一番上にない場合は、 を使用して値を取得しますobject.attributname。オブジェクトが値スタックにある場合は、直接アクセスできますattributename

于 2014-10-09T07:29:46.080 に答える