我应该找到并将struts样式和javascripts复制到/ struts /文件夹启用客户端验证吗?

时间:2013-01-07 00:22:37

标签: struts2 struts2-jquery struts-validation

客户端验证对我不起作用。首先,我认为这是一个myeclipse故障,不会将它们复制到根文件夹,但后来我发现js和css文件驻留在struts核心jar中。现在我想知道我应该做什么!如果我找到并将所有js和css文件从相应的文件夹复制到webRoot,或者有更改配置等智能解决方法吗? Struts应该自己复制吗?

我在Struts中使用Tiles。这可能是问题吗?

我的JSP文件位于WEB-INF文件夹中!它会引起一些问题吗?

使用像struts2-jquery插件这样的东西可以解决我的问题吗?

我使用struts2!

我的struts2过滤器配置是

  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    </filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>*.action</url-pattern>
  </filter-mapping>

    <listener>
    <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
</listener>

2 个答案:

答案 0 :(得分:2)

在Java项目(以及其他项目)中,Eclipse会将所有文件从SOURCE文件夹复制到OUTPUT文件夹。

这意味着如果你将MyClass.java和foobar.properties放在/ src文件夹中,你的/ bin文件夹下会有MyClass.class和foobar.properties(根据为输出文件夹选择的名称),你将建立你的项目。

为了实现更多自动化,例如替换配置文件中的令牌(比如说环境变量配置),或者动态检索所需的库,通常采用的两个主要工具是Apache AntApache Ivy作为依赖管理器),或Apache Maven

通常,

  • 属性文件放在src文件夹的根目录中;
  • Struts2 XML验证文件放在Action要验证的同一个包下;
  • Struts2 XML访问者验证文件放在POJO的同一个包下进行验证;
  • JSP文件,JS文件,CSS文件(如果它们需要在战争中)放在/ WEB-INF文件夹旁边,任何人都不会移动它们。

典型的结构可能是:

src |
    |-- java
    |-- web
       |-- css
       |-- js
       |-- jsp
       |-- WEB-INF
          |-- lib

看看这个SO答案:

Best location to put your CSS and JS files in a Mavenized Java Web app?

Where do CSS and JavaScript files go in a Maven web app project?


也就是说,当您引用客户端验证时,需要更明确。 如果你的意思是Javascript验证,那么像上面一样重构项目,然后描述你的问题,看看JS控制台;

但是使用Struts2最好用XML Validation验证输入,因为客户端验证不可靠:

假设我绕过了使用FireBug注入HTML directyl的javascript控件,或者我在运行时使用所需参数创建了一个Form并将其发送到服务器,或者我正在使用禁用了javascript的浏览器...客户端不受你的控制,那么验证服务器端是一个好习惯。

答案 1 :(得分:2)

这里的具体问题是过滤器配置:

<filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>*.action</url-pattern>
</filter-mapping>

推荐的配置(除非您明确知道自己在做什么)是要映射到*

<filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>*</url-pattern>
</filter-mapping>

如果您只映射到*.action,则过滤器不会处理非操作请求(如CSS和JavaScript)。 S2检查它(S2)知道的文件请求,例如它自己的CSS和JavaScript文件,并且即使它们不是动作请求,也会自己提供这些请求。

S2 guides' Static Content section中记录了这一点。

完全有效映射到*.action,但是需要提取静态文件并将它们放在所需的位置,至少如果你打算使用默认的S2主题/ JavaScript。这也是可选的:该框架旨在让您相对快速地开始,但如果您有框架无法处理的特定需求,那么使用S2的那部分可能是也可能不是最佳选择。< / p>