2013年2月18日 晴
被一個bug搞得我發神經,不過經過認真搜索,最後還是找到解決方案,這樣才得以讓小巫繼續學習下去。
Struts2 第17part Dynamic Result動態結果集
之前,關於Action的動態方法調用,已經接觸過動態這個概念了。然而動態結果又是怎麼進行配置的呢? 關鍵還是在struts.xml配置文件當中。
先來說說自己遇到的bug是什麼吧,動態配置結果用到的是OGNL表達式,項目原本是這樣配置的。
- <action name="user" class="com.bjsxt.struts2.user.action.UserAction">
- <result>${r}</result>
- </action>
result標籤裏的用${r}這樣的表達式來動態指定下一個Action,原本照這樣配置,應該是沒有什麼問題的。但就是出錯,之前以爲是Struts2的版本問題,然後就去Web.xml修改Filter.但還是無濟於事,最後上網查了很久,最終找到一個能解決自己問題的文章,自己稍微修改了一下,問題就這樣解決了。
完整的struts.xml代碼如下:
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <constant name="struts.devMode" value="true" />
- <package name="user" namespace="/user" extends="struts-default">
- <action name="user" class="com.wwj.struts2.user.action.UserAction">
- <result>${r}.jsp</result>
- </action>
- </package>
- </struts>
我是將${r}改爲${r}.jsp, 然後問題就解決了,感覺有點扯。對吧。
當然UserAction也要做相應的修改,把jsp後綴去掉就ok了。
- package com.wwj.struts2.user.action;
- import com.opensymphony.xwork2.ActionSupport;
- public class UserAction extends ActionSupport {
- private int type;
- private String r;
- public String getR() {
- return r;
- }
- public void setR(String r) {
- this.r = r;
- }
- public int getType() {
- return type;
- }
- public void setType(int type) {
- this.type = type;
- }
- @Override
- public String execute() throws Exception {
- // TODO Auto-generated method stub
- if(type == 1) r="/user_success";
- else if (type == 2) r="/user_error";
- return "success";
- }
- }
就這樣,關於動態結果集配置的內容就這麼多。我發現下面幾個項目也是同樣的問題。不過已經知道問題所在,我想應該能輕鬆解決。