2012-03-30 59 views
1

我有一个关于在Struts2中返回数据的问题。 在我的Action类中,如下所示,我正在获取记录并在ArrayList中设置它们。如何返回一个ArrayList作为Struts2的Action类的执行方法?

但是有没有人可以告诉我,我该如何将获得的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; 
} 

} 

回答

-1

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

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

查看(结果) - 在MVC架构中查看是负责演示(用户界面)的组件。 View组件使用Model组件来获取数据并显示它。 Struts 2支持多种技术,例如JSP,Velocity模板,FreeMarker,用于View组件的XSLT。在Struts 2术语中,View被视为结果。动作类(Model)确定应该向用户呈现什么Result(View)。

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

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

OGNL

绑定元件到模态的目的和从一种类型转换值与模态对象另一个 绑定通用代码。 动态创建列表和地图,与GUI方法一起使用 调用方法。你可以调用任何方法,而不仅仅是getter和setter。

+0

下来选民请让我知道这里有什么问题,以便我可以做出适当的修改。 – 2012-08-15 00:03:15

+0

我假设,因为(一)它不回答这个问题,(二)需要很多的话才不回答。然而,一年之后,我终于明白了这个问题,因为我随即获得了一个赞成票。 – 2013-11-09 12:44:02

2

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

访问list相同name –通过提供公共的访问到列表:

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

相关问题