1

如何在 struts2 中创建一个在不同类中使用多个方法的动作?

因此,例如,我想要这样的东西,但我很确定这不起作用:

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

具体来说,我使用的是struts 2.1.8.1

PersonAction.java - personCreate()

Person person = new Person();

CarAction.java - carCreate()

Car car = new Car();

4

4 回答 4

2

有两个变量:

1:你为什么愿意调用2个动作,从MVC的概念来看,你不应该这样做,如果你想处理不同的对象,你应该建立一个新的层(例如接口,或服务层)来做到这一点。

2:如果你必须这样做,你可以定义一个新的动作,它使用chain结果类型来调用它们。这里是链结果类型,但要小心。

于 2012-09-13T16:25:48.430 回答
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 回答
1

你是对的,它不是那样工作的。考虑一个操作是否返回成功,而另一个操作是否返回错误。在这种情况下,struts2 框架会执行什么结果?

相反,您可以做的是调用一种操作方法,该方法将调用其中的其他两种方法。像这样的东西:

<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
}

如果上述不是合适的解决方案,请编辑您的问题,详细说明为什么要在操作中调用两个单独的方法。我仍然不清楚为什么你会以这种方式将两种方法用于一个操作。

于 2012-09-13T15:01:20.243 回答
1

如果我清楚地了解您,您想在调用 persone_create 操作时调用 2 个操作类。你能告诉我这个动作课吗?如果此类具有相同名称的字段,那将是一个问题。因为动作类中的所有字段(当调用动作类时)都进入 ValueStack,结果只有这些类中的一个具有来自您的 jsp 页面的信息的所有字段。

于 2012-09-13T14:21:28.157 回答