Struts2 Convention Plugin(二)

Results and result codes
Struts启动后,Convention将预设好应用中的所有的action,默认情况下,配置将包含在你应用中能找到的所有JSP文件。
同时您也可在Action代码中设置与习惯不同的结果页面。通常Action方法返回一个字符串,通过返回的字符串找到结果页面,而使用Convention允许你在action代码中指定和返回字符串不同的结果页面。
编译下面的例子。我们希望在action中返回zero 而不是success,第一步,我们更新action类,返回zero。

 

 


1.package com.example.actions; 
2.  
3.import com.opensymphony.xwork2.ActionSupport;  
4.  
5.public class HelloWorld extends ActionSupport { 
6.    private String message; 
7.  
8.    public String getMessage() { 
9.            return message; 
10.    } 
11.  
12.    public String execute() { 
13.        if (System.currentTimeMillis() % 2 == 0) { 
14.            message = "It's 0"; 
15.            return "zero"; 
16.        } 
17.  
18.        message = "It's 1"; 
19.        return SUCCESS; 
20.    } 
21.}

接下来,我们添加一个新的JSP页面 WEB-INF/content/hello-world-zero.jsp 。需要注意的是,文件名的第一部分和action名是对应的,后面的部分和action返回的字符串对应。这就是convention确定具体使用那个页面来渲染结果。下面是修改后的JSP代码:

 
1.<html> 
2.<body> 
3.    The error message is ${message} 
4.</body> 
5.</html>

现在,你可以编辑你的程序,重启应用,刷新页面,根据当前时间不通,会看到不通的渲染结果页面
结果页面的类型会自动匹配文件,支持的渲染页面的格式为:jsp.ftl,vm,html,htm.下面是actiong和结果模版的映射关系:

 

 

 

URL

Result

File that could match

Result Type

/hello

success

/WEB-INF/content/hello.jsp

Dispatcher

/hello

success

/WEB-INF/content/hello-success.htm

Dispatcher

/hello

success

/WEB-INF/content/hello.ftl

FreeMarker

/hello-world

input

/WEB-INF/content/hello-world-input.vm

Velocity

/test1/test2/hello

error

/WEB-INF/content/test/test2/hello-error.html

Dispatcher

 

 

 

Action链

如果在一个action结果中调用另外一个action ,他们俩将被链接到一起,如果在第一个action代码中未定义result,如下代码:

 
1.package com.example.actions; 
2.  
3.import com.opensymphony.xwork2.Action; 
4.import com.opensymphony.xwork2.ActionSupport;  
5.  
6.public class HelloAction extends ActionSupport { 
7.    @Action("foo") 
8.    public String foo() { 
9.        return "bar"; 
10.    } 
11.  
12.    @Action("foo-bar") 
13.    public String bar() { 
14.        return SUCCESS; 
15.    } 
16.}

“foo”action执行时候,由于找不到结果,convention尝试在同一个包下寻找action名为“foo-bar”的action。如果找到这样的action,convention将会调用并返回相关联的result。

XWork packages
为了避免冲突,可将action放在一个自定义XWORK的package下。package命名由action所在的Java包,action对应的URL中namespace部分以及action的parent XWork package三个部分组成。parent XWork package 值在属性 struts.convention.default.parent.package 中指定(默认为conventionDefault),package的属性值须继承于 strutsDefault
因此,Convention插件中XWORK packages 采用如下命名规则:

 
1.<java-package>#<namespace>#<parent-package>
<java-package>#<namespace>#<parent-package>
Using our example from above, the XWork package for our action would be:
上例中,action对应的 XWORK package如下:

 
1.com.example.actions#/#conventionDefault

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值