如何返回Struts2 Action类的执行方法?

时间:2012-03-30 14:24:25

标签: struts2

我有一个关于在Struts2中返回数据的问题。 在我的Action类中,如下所示,我获取记录并将它们设置在ArrayList中。

但有人可以告诉我,如何将获取的ArrayList返回到JSP页面?因为使用Action类execute方法的语法,它允许我们只返回一个String?

public class DBDisplay extends ActionSupport{
private String name ;
List list = null;

public String execute() throws Exception
{
list = DBClass.getInstance().list();
Iterator it = list.iterator();
while(it.hasNext())
{
name = (String) it.next();
}
setName(name);
}
public String getname()
{
return name;
}
public void setName(String name)
{
this.name = name;
}

}

2 个答案:

答案 0 :(得分:2)

Action类返回一个字符串来命名结果,而不是返回数据。数据通过操作属性(如您已公开的name)或模型实例(如果实现ModelDriven)公开。

通过提供列表的公共访问者,访问listname相同:

public class DBDisplay extends ActionSupport {
    private List list;
    public List getList() { return list; }
    // Rest of class elided.
}

然后从JSP中,例如:

<s:iterator value="list">
    <s:property /><br/>
</s:iterator>

迭代器标记"value"属性引用list操作属性,并将在操作上调用getList()。如果没有"value"属性,则属性标记将访问堆栈顶部的值。

您可能希望花一些时间查看Struts 2 "nutshell" documentation

答案 1 :(得分:-1)

Struts 2框架的基本设计目标之一是将MVC(模型 - 视图 - 控制器)设计模式引入Web应用程序开发。 MVC模式可以分离关注点,并允许易于维护的干净且松散耦合的代码。 MVC模式由3个不同的部分组成。模型,视图和控制器。让我们看看Struts 2中如何实现这三个元素。 Controller(StrutsPrepareAndExecuteFilter) - Controller是处理各种请求协调的组件。在Web应用程序中,不同的用户请求需要由不同的应用程序组件提供,并且此决策由Controller组件执行。在Struts 2中,对Web应用程序的每个请求都首先到达前端控制器类 - StrutsPrepareAndExecuteFilter。这会检查传入的请求,然后将请求路由到配置为处理请求的相应类(称为Struts中的Action类)。

模型(Action) - Model是负责执行应用程序业务功能的组件。它是应用程序的核心。它表示应用程序的状态,包括业务逻辑和业务数据。在Struts 2中,操作类充当应用程序模型的网关。这些类负责处理每个用户请求,然后将业务逻辑委托给应用程序开发人员编写的其他类。 为不同的用户请求提供不同的操作类可确保我们拥有可轻松维护的干净代码。但是,不同的用户请求(例如应用程序日志记录)需要的功能呢?对于这样的横切问题,Struts 2有一个不同的组件叫做拦截器。

视图(结果) - MVC架构中的视图是负责演示(用户界面)的组件。 View组件使用Model组件获取数据然后显示它。 Struts 2支持多种技术,如JSP,Velocity模板,FreeMarker,XSLT for View组件。在Struts 2术语中,View被称为结果。动作类(Model)确定应向用户显示哪个Result(View)。

用户通过在浏览器中访问应用程序URL来访问Struts 2应用程序功能。请求总是来自StrutsPrepareAndExecuteFilter控制器(因为它是在所有Struts 2应用程序的web.xml中配置的)。 StrutsPrepareAndExecuteFilter查找要在struts.xml文件中调用的Action类。或者它可以使用约定来猜测它。然后调用Action类的execute()方法,该方法又调用业务逻辑类。      操作类可以指定要使用注释显示的视图,也可以在struts.xml文件中指定。无论哪种方式,Struts 2都知道要调用哪个View(Result)来将数据显示回用户。另一个需要注意的重要事项是Action类中的对象可供View组件使用。因此,动作不仅要确定要显示的视图(结果),还要提供视图所需的数据。

valueStack(它是objectStack和contextMap的组合)OGNL用于存储动作和其他对象。您可以使用OGNL访问对象堆栈和上下文映射。

OGNL

将元素绑定到模态对象并将值从一种类型转换为另一种类型 使用模态对象绑定通用标记。 动态创建列表和地图,以便与GUI方法一起使用 调用方法。你可以调用任何方法,而不仅仅是getter和setter。