在JSF托管bean中,我从this past question获取以下代码:
String uri = "/myAction";
FacesContext.getCurrentInstance().getExternalContext().dispatch(uri);
myAction
是我struts.xml
中定义的Struts操作的名称。
但是当我访问JSF bean时,我没有转发到/myAction
。相反,我收到了404 http错误:The requested resource (/MyApp/myAction) is not available
。
为什么不起作用?
当我尝试直接从浏览器访问/myAction
时,转到http://localhost:8080/MyApp/myAction
一切正常。
答案 0 :(得分:0)
线索在dispatch
方法的javadoc中:
“参数: path - 指向资源的上下文相对路径,该路径必须以斜杠(“/”)字符开头“
即它调度到相对于您的应用程序上下文的URL,而不是您的Web服务器根文件夹
您需要的是重定向到绝对网址的redirect
方法。
答案 1 :(得分:0)
在web.xml
中设置Struts 2过滤器以接受转发(和直接请求(或重定向)):
在web.xml
中,更改:
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
要:
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
<!-- uncomment if you plan to include struts action output -->
<!--
<dispatcher>INCLUDE</dispatcher>
-->
</filter-mapping>
信用:
http://www.coderanch.com/t/59584/Struts/request-dispatcher-struts-action
http://docs.oracle.com/cd/B32110_01/web.1013/b28959/filters.htm#BCFIEDGB