1

我正在關注的Struts 2 Hello World Annotation Example教程由Mkyong:@Result在類級別和方法級別

@Namespace("/User") 
@ResultPath(value="/") 
@Action(value="/welcome", 
     results={@Result(name="success", location="pages/welcome_user.jsp")}) 
public class WelcomeUserAction extends ActionSupport { 

    public String execute(){ 
     return SUCCESS; 
    } 
} 

訪問http://localhost:8080/project_name/User/welcome工作正常的URL。

現在,我試圖從一流水平的@Action(因此@Result)註釋移動到方法的層次:

@Namespace("/User") 
@ResultPath(value="/") 
public class WelcomeUserAction extends ActionSupport { 

    @Action(value="/welcome", 
      results={@Result(name="success", location="pages/welcome_user.jsp")})  
    public String execute(){ 
     return SUCCESS; 
    } 
} 

但這樣做後,我得到的404錯誤:

/project_name/pages/welcome_user.jsp is not found.

我的JSP是下

/WebContent/User/pages 

這究竟是爲什麼?

+0

在你的配置中爲'struts.enable.SlashesInActionNames'設置了什麼?只需刪除操作名稱中的斜槓即可 - >'@Action(value =「welcome」'。 –

+0

用這個解決方案回答這個問題@AleksandrM –

回答

1

由於Struts2的會找你的JSP中

WebContent/@ResultPath/@Namespace/@Result 

而不是做

@ResultPath("/")/@Namespace("/User")/@Result("pages/welcome_user.jsp") 

你可以從

WebContent/User/pages/welcome_user.jsp 

移動你的JSP來

WebContent/pages/User/welcome_user.jsp 

,然後使用

@ResultPath("/pages")/@Namespace("/User")/@Result("welcome_user.jsp") 

此時,下面的兩個配置應該工作:

隨着@Action類級別

@ResultPath(value="/pages") 
@Namespace("/User") 
@Action(value="/welcome", results={@Result(name="success", location="welcome_user.jsp")}) 
public class WelcomeUserAction extends ActionSupport { 

    public String execute(){ 
     return SUCCESS; 
    } 
} 

隨着@Action方法級

@ResultPath(value="/pages") 
@Namespace("/User") 
public class WelcomeUserAction extends ActionSupport { 

    @Action(value="/welcome", results={@Result(name="success", location="welcome_user.jsp")}) 
    public String execute(){ 
     return SUCCESS; 
    } 
} 

我不知道爲什麼Mkyong的例子只適用於課堂級別的註釋,而我正在等待更多專家來充實我們的好奇心;同時,這應該是你需要的。

+1

謝謝Andrea Ligios! – Jake

相關問題