Struts2 sj:使用scriptPath编写头文件

时间:2015-03-06 09:51:46

标签: struts2 struts2-jquery

我有一个使用Struts2制作的Web应用程序。 我正在使用struts2-Jquery插件。

在jsp head部分中使用此设置:

   <%@ 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 to it:

<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

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。

我扩展了org.apache.struts2.dispatcher.DefaultStaticContentLoader类,并在struts.xml中放入一个常量后,使用我的类进行静态内容加载。

首先创建你的Loader。您必须覆盖两个方法: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中,只需将此类添加为staticContentLoader。

<constant name="struts.staticContentLoader" value="hu.nebih.hfnyportal.util.HFNyPublicStaticLoader"/>

就是这样。

对我而言,这已经足够了。