1

次のコード(自分で作成したものではない)が意図したとおりに機能するプログラムがあります。

.JSP コード:

<input type="submit" value="add sample" name="action:dataAddSample" id="buttonAddSample"/>

STRUTS.XML コード:

<action name="dataAddSample" class="com.invenso.xperido.controller.DataCRUD" method="addSample">
    <result name="success" type="redirectAction">
        <param name="actionName">dataform</param>
        <param name="id">${data.id}</param>
    </result>
</action>

actionmethodaddSample が「success」を返した後、アクションdataformが実行され、このアクションはユーザーを次の URL (パラメーター ID を使用) にリダイレクトします。

http://localhost:8080/Test/data/dataform.action?id=11476

このコードを同じパッケージと名前空間にコピーして、同様のワークフローを実現しましたが、異なるアクション メソッド (追加ではなく削除) のみを使用しました。

<action name="dataDeleteSample" class="com.invenso.xperido.controller.DataCRUD" method="deleteSample">
    <result name="success" type="redirectAction">
        <param name="actionName">dataform</param>
        <param name="id">${data.id}</param>
    </result>
</action>

入力ボタンをアクションに直接リンクする代わりに、ajax を使用してアクションを呼び出す方法を変更しました。

JAVASCRIPT/AJAX コード:

$.ajax({
type: "POST",
url: "<s:property value='urlDeleteSample'/>",
data: { sampleDBName: sampleName, sampleDBQueryName: queryName },
success: function(data, textStatus, jqXHR){ ......

URL はまさにアクションへのリンクであるため、機能します。デバッグ メッセージを使用して、アクションdataDeleteSampleトリガーを確認でき、メソッドdeleteSampleが呼び出されます。しかし、何らかの理由で、ユーザーは上記のような URL にリダイレクトされません。メソッド内のすべてのビジネス ロジックを削除し、deleteSampleAction.SUCCES を返すようにしましたが、それでも結果はデー​​タフォーム アクションをトリガーしてユーザーをリダイレクトするようには見えません。

何が原因でしょうか? 私がAJAXを使用したのは事実ですか?最初のコードが機能する理由を理解できるほどストラットに精通していませんが、私のコードは機能しません。Struts フレームワークがこのシナリオをどのように処理するかについての洞察を歓迎します。

4

2 に答える 2

0

AJAX を使用して呼び出しているため、リダイレクトに気付かないでしょう。つまり、結果を表示するには、取得した DATA を DOM に追加する必要があります。成功イベント ハンドラーでそれを行う必要があります。そこで失敗している可能性があります。デバッグしてください。

于 2013-10-18T14:04:07.197 に答える