struts2动作 - 多种方法&多个班级

时间:2012-09-13 14:09:28

标签: java struts2

如何在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 个答案:

答案 0 :(得分: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>

当您提交表单时,您的操作类将包含来自表单信息的persone和car对象))

答案 1 :(得分:2)

有两个变量:

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

2 :如果必须这样做,您可以定义一个新操作,使用chain结果类型将其全部调用。这是Chain result type,但要小心。

答案 2 :(得分:1)

如果我清楚地了解你,你想在调用persone_create动作时调用2个动作类。 你能告诉我这个动作课吗? 如果此类具有相同名称的字段,则会出现问题。 因为来自动作类的所有字段(当调用动作类时)都转到ValueStack,结果只有其中一个类具有包含来自jsp页面的信息的所有字段。

答案 3 :(得分: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
}

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