2

コードで次の状況があります。

アクション クラス:

@NameSpace("/")
public class MyAction extends ActionSupport implements ModelDriven<Car> {
    private Car car = new Cart();

    @Override
    public Car getModel() {
        return car;
    }

    @Action(value = "pageAction", results = {name = SUCCESS, location = "myPage", type="tiles"})
    public String showPage() {
        return SUCCESS;
    }

    @Action(value = "formSubmitAction", results = {name = SUCCESS, location = "results.jsp"})
    public String formSubmitAction() {
        System.out.println(car);
        // everything has default values (nulls)
        return SUCCESS;
    }
}

myPage の場所を表示:

<s:form 
    namespace="/" 
    action="pageAction" 
    method="post" >
    <s:push value="model">
        <s:textfield name="color" />
        <s:textfield name="manufacturer" />
        <sj:submit
            href="formSubmitAction"         
            targets="output"  />
    </s:push>
</s:form>

<div id="output"></div>

results.jsp:

空のコンテンツをレンダリングしますdiv#output

<s:property value="%{model}" />
<s:property value="%{model.color}" />
<s:property value="%{model.manufacturer}" />

なぜそれが起こっているのだろうか?送信後にモデル データが更新されません。

struts2-jquery submit tagを使用しています。

Ajax を使用せずに単純なフォーム送信を使用すると、モデルが更新されますが、Ajax を使用して非同期でデータをロードしたいと考えています。

どうすればそれを達成できますか?

4

2 に答える 2

0

form解決策は、sj:submitタグに ID を追加することです。しかし、フォーム内の送信タグが正しく機能していなかった理由がわかりません。正しいコードは次のとおりです。

<s:form 
    id="formId"
    namespace="/" 
    action="pageAction" 
    method="post" >
    <s:push value="model">
        <s:textfield name="color" />
        <s:textfield name="manufacturer" />
        <sj:submit
            formIds="formId"
            href="formSubmitAction"         
            targets="output"  />
    </s:push>
</s:form>

編集

ID を に追加するだけformで、すべてが機能します :)
以下のコメントのリンクを見てください。

于 2014-06-12T10:42:02.520 に答える
0

modelDrivenインターセプターはモデルをの上にプッシュしvalueStackます。したがって、モデル プロパティに直接アクセスできます。

<s:property value="%{color}" />
<s:property value="%{manufacturer}" />
于 2014-06-12T10:14:24.430 に答える