如果你要在action里定义result到指定的jsp,这个业务虽然用的很频繁但是在convention里却不是那么方便。你必须在你跳转的action代码里写上annotations来定义。下面是一段示例代码:
@ResultPath("/WEB-INF/content/")
public class GroupAction extends ActionSupport
{
private String userName = null;
@Action(value="/group/showTree",results={@Result(name="showTree",location="test.jsp",type="dispatcher")})
public String showTree()
{
this.setUserName("青林科技");
System.out.println("撒旦法萨达发士大夫撒的");
return "showTree";
}
@Action(value="/group/showGrid",results={@Result(name="showGrid",location="test.jsp",type="redirect")})
public String showGrid()
{
this.setUserName("青林科技abc");
System.out.println("撒旦法萨达发士大夫撒的abc");
return "showGrid";
}
@Action(value="/group",results={@Result(name=SUCCESS,location="http://baidu.com",type="redirect")})
public String execute()
{
return SUCCESS;
}
public String getUserName()
{
return userName;
}
public void setUserName(String userName)
{
this.userName = userName;
}
}
@ResultPath("/WEB-INF/content/")是表明result的基础目录;如果你已经在struts.xml里定义了:
<constant name="struts.convention.result.path" value="/WEB-INF/content/"/>
那么就不需要再在代码里写上注解标明了。
那 么你result的jsp就要在这个目录下面。但是仅限于你的result的type="dispatcher"的时候。type="redirect" 他还是会去应用的根目录找jsp这个就不得解了,测试结果是这样。这里必须解释下result里的几个type常量含义我现在只知道四个:
dispatcher:重定向;
redirect:请求转发;
chain:不清楚含义,好像只针对action不能用于跳转jsp;
缺省:功能同dispatcher。
所有上面的那个问题为什么不行就有了另外一个逻辑的排除方法:因为redirect是重定向所以他不可以访问到WEB-INF/里的的资源,所有他也不支持@ResultPath的定义咯。呵呵牵强了。
@Action(value="/group/showTree",results={@Result(name="showTree",location="test.jsp",type="dispatcher")})
这 样写还有个问题。如果把test.jsp放在/WEB-INF/content/下面,result是找不到test.jsp的,因为他会去找/WEB- INF/content/group/test.jsp这个文件,因为action的名字value="/group /showTree",convention是希望我们在开发的时候类模块的包名跟视图模块的包名相同,这确实有好处也清楚明了。但是不能忽略特殊情况, 这里有两种解决方法:1,修改location="/test.jsp"成这样;2,修改value="/showTree"成这样。ok
convention Result规则路径问题
最新推荐文章于 2020-05-21 23:11:28 发布