Struts2 sj:head 与 scriptPath
Struts2 sj:head with scriptPath
我有一个用 Struts2 制作的网络应用程序。
我正在使用 struts2-Jquery 插件。
在 jsp 头部部分使用此设置:
<%@ taglib prefix="sj" uri="/struts-jquery-tags" %>
<head>
<sj:head/>
</head>
一切正常,生成的 HTML 代码如下所示:
<script src="/MyContextRoot/struts/js/base/jquery-1.10.0.min.js" type="text/javascript">
关于 API:
https://code.google.com/p/struts2-jquery/wiki/HeadTag
如果我将 sj:head 更改为:
<sj:head scriptPath="/MyContextRoot/MySubDir/struts/"/>
然后生成的代码将如下所示(如预期):
<script src="/MyContextRoot/MySubDir/struts/js/base/jquery-1.10.0.min.js" type="text/javascript">
但是这个请求给我一个来自服务器的 404 错误。
我可以创建目录,并放入所需的 js 文件,但我希望 Struts 能够满足这些请求。因为它在第一种情况下有效。
我的 Struts2 过滤器映射到:/*
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
有什么想法吗?
谢谢,
zsom
我找到了解决方案。
我扩展了 org.apache.struts2.dispatcher.DefaultStaticContentLoader class,并且在我将常量放入 struts.xml 之后,使用我的 class 进行静态内容加载.
首先创建您的加载程序。您必须覆盖两个方法:canHandle 和 findStaticResource。
public class MyStaticLoader extends DefaultStaticContentLoader{
...
public boolean canHandle(String resourcePath) {
return superCanHandle || resourcePath.contains("MySubDir/struts");
}
public void findStaticResource(String path, HttpServletRequest request, HttpServletResponse response) throws IOException {
if(path != null && path.startsWith("/MySubDir/struts")){
path = path.substring(9);
}
super.findStaticResource(path, request, response);
}
}
在 struts.xml 中只需将此 class 添加为 staticContentLoader。
<constant name="struts.staticContentLoader" value="hu.nebih.hfnyportal.util.HFNyPublicStaticLoader"/>
就这些了。
对我来说已经足够了。
我有一个用 Struts2 制作的网络应用程序。 我正在使用 struts2-Jquery 插件。
在 jsp 头部部分使用此设置:
<%@ taglib prefix="sj" uri="/struts-jquery-tags" %>
<head>
<sj:head/>
</head>
一切正常,生成的 HTML 代码如下所示:
<script src="/MyContextRoot/struts/js/base/jquery-1.10.0.min.js" type="text/javascript">
关于 API: https://code.google.com/p/struts2-jquery/wiki/HeadTag 如果我将 sj:head 更改为:
<sj:head scriptPath="/MyContextRoot/MySubDir/struts/"/>
然后生成的代码将如下所示(如预期):
<script src="/MyContextRoot/MySubDir/struts/js/base/jquery-1.10.0.min.js" type="text/javascript">
但是这个请求给我一个来自服务器的 404 错误。
我可以创建目录,并放入所需的 js 文件,但我希望 Struts 能够满足这些请求。因为它在第一种情况下有效。
我的 Struts2 过滤器映射到:/*
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
有什么想法吗?
谢谢, zsom
我找到了解决方案。
我扩展了 org.apache.struts2.dispatcher.DefaultStaticContentLoader class,并且在我将常量放入 struts.xml 之后,使用我的 class 进行静态内容加载.
首先创建您的加载程序。您必须覆盖两个方法:canHandle 和 findStaticResource。
public class MyStaticLoader extends DefaultStaticContentLoader{
...
public boolean canHandle(String resourcePath) {
return superCanHandle || resourcePath.contains("MySubDir/struts");
}
public void findStaticResource(String path, HttpServletRequest request, HttpServletResponse response) throws IOException {
if(path != null && path.startsWith("/MySubDir/struts")){
path = path.substring(9);
}
super.findStaticResource(path, request, response);
}
}
在 struts.xml 中只需将此 class 添加为 staticContentLoader。
<constant name="struts.staticContentLoader" value="hu.nebih.hfnyportal.util.HFNyPublicStaticLoader"/>
就这些了。
对我来说已经足够了。