1

異なるクラスの複数のメソッドを使用するアクションをstruts2でどのように作成しますか?

たとえば、私はこのようなものが欲しいのですが、これはうまくいかないと確信しています。

<action name="person_create" method="personCreate, carCreate" class="PersonActionBean, CarActionBean">
   <result name="success">index.jsp</result>
</action>

具体的には、Struts2.1.8.1を使用しています

PersonAction.java --personCreate (

Person person = new Person();

CarAction.java --carCreate ()

Car car = new Car();

4

4 に答える 4

2

またはあなたはこのようなものを作ることができます

public class MainAction extends ActionSupport{

private Car car;
private Persone persone;

public String execute() {
 }

// add getters and setters to car and persone objects.
}

そして、jspは次のようになります。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <link rel="stylesheet" type="text/css" href="css/style.css"/>
</head>
<body>
<s:form action="init">
    <s:textfield key="car.name" name="car.name"/>
    <s:textfield key="car.year" name="car.year"/>
    <s:textfield key="car.name" name="car.name"/>
    <s:textfield key="car.year" name="car.year"/></s:textarea>
    <s:submit key="init.submit"/>
</s:form>
</body>
</html>

およびstruts.xmlファイル:

<action name="init" method="execute" class="MainAction">
   <result name="success">index.jsp</result>
</action>

フォームを送信すると、アクションクラスには、フォームからの情報を含む人と車のオブジェクトが含まれます))

于 2012-09-13T15:13:42.037 に答える
2

2つの変数があります:

1:MVCの概念から2つのアクションを呼び出すのはなぜですか?これを行うべきではありません。別のオブジェクトに処理する場合は、これを行うために新しいレイヤー(インターフェイスやサービスレイヤーなど)を構築する必要があります。

2:これを行う必要がある場合は、chain結果タイプを使用してそれらすべてを呼び出す新しいアクションを定義できます。これがチェーン結果タイプですが、注意してください。

于 2012-09-13T16:25:48.430 に答える
1

私があなたをはっきりと理解しているなら、persone_createアクションを呼び出すときに2つのアクションクラスを呼び出したいと思います。そして、このアクションクラスを見せてくれませんか。このクラスが同じ名前のフィールドを持っている場合、問題になります。アクションクラスのすべてのフィールド(アクションクラスが呼び出された場合)はValueStackに移動し、その結果、このクラスの1つだけがjspページからの情報を持つすべてのフィールドを持つことになります。

于 2012-09-13T14:21:28.157 に答える
1

そうです、それはそのようには機能しません。1つのアクションが成功を返し、別のアクションがエラーを返したかどうかを検討します。その場合、struts2フレームワークはどの結果を実行しますか?

代わりに、実行できるのは、その中の他の2つのメソッドを呼び出す1つのアクションメソッドを呼び出すことです。このようなもの:

<action name="person_create" method="execute" class="MainAction">
   <result name="success">index.jsp</result>
</action>

そして、そのアクションの一部として、次のような他のメソッドを呼び出すことができます。

public String execute() {
    Person person = new Person();
    Car car = new Car();
    // Add any additional logic and return appropriate value
}

上記が適切な解決策ではない場合は、アクションで2つの別々のメソッドを呼び出す理由について、質問を詳細に編集してください。なぜそのように1つのアクションに2つの方法が必要なのかはまだわかりません。

于 2012-09-13T15:01:20.243 に答える