0

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

我将 Tiles 与 Struts 一起使用。会不会是问题?

我的 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>
4

2 回答 2

3

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

<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 指南的静态内容部分中。

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

于 2013-01-07T16:55:03.587 回答
2

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

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

对于更多的自动化,比如替换配置文件中的标记(比如说环境变量 config),或者动态检索所需的库,通常采用的两个主要工具是Apache Ant(以Apache Ivy作为依赖管理器)或Apache Maven

通常,

  • 属性文件放在 src 文件夹的根目录下;
  • Struts2 XML Validation 文件放在Action 的同一个包下进行验证;
  • Struts2 XML Visitor Validation文件放在POJO的同一个包下进行验证;
  • JSP文件、JS文件、CSS文件放在/WEB-INF文件夹旁边(如果需要放在war里面),不会被任何人移动。

一个典型的结构可能是:

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

也看看这个 SO 答案:

将 CSS 和 JS 文件放入 Mavenized Java Web 应用程序的最佳位置?

CSS 和 JavaScript 文件在 Maven Web 应用程序项目中的位置?


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

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

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

于 2013-01-07T10:24:46.473 回答