【问题标题】:How to avoid Struts2 validation如何避免 Struts2 验证
【发布时间】:2015-01-22 16:44:44
【问题描述】:

我有一个index.jsp,我从中调用一个动作类TestAction(点击超链接),它有方法(显示)从数据库中加载组合框的值以及执行方法,显示在页面@987654323 @。

在test.jsp 上,我有一些输入字段以及组合框。单击 test.jsp 上的按钮时,我想验证输入字段,但问题是当我来自 index.jsp 时,那一次只能验证正在发生,test.jsp 打开并显示错误消息。

我尝试使用<ActionName>-validator.xml 进行客户端验证以及通过覆盖验证方法使用服务器端验证。如何避免在单击 index.jsp 上的超链接时进行验证,并且可以在单击 test.jsp 上的按钮上进行验证。

这是我的代码:

index.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
   pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Data</title>

</head>
<body>
<s:form>

   <a href="<s:url action="displayAction.action"/>" >Display Data</a><br>

</s:form>
</body>
</html>

test.jsp:

     <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
           pageEncoding="ISO-8859-1"%>
        <%@ taglib prefix="s" uri="/struts-tags"%>
        <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
        "http://www.w3.org/TR/html4/loose.dtd">
        <html>
        <head>
        <title>Data</title>
     <script type="text/javascript">


           function openPopUp(){
                document.getElementById('testForm').setAttribute('target', '_blank');
                document.getElementById('testForm').setAttribute('action', 'testAction.action');
            }
            </script>
        <s:head theme="ajax" debug="true"/>
        </head>
        <body bgcolor="white">

        <s:form validate="true" id="testForm">
        <div>
      <s:actionerror/>
   </div>
        <table>

        //Mapping of data from database

        </table>
        <s:submit id="submitButton" value="Display Chart" align="center" onclick="openPopUp();"/>
        </s:form>
        </body>
        </html>

struts.xml

<action name="testAction" 
        class="testAction" 
        method="execute">
             <result name="success" type="chart">
                <param name="value">chart</param>
                <param name="type">jpeg</param>
                <param name="width">600</param>
                <param name="height">400</param>
            </result> 
</action>

<action name="displayAction" 
        class="testAction" 
        method="display">
            <result name="success">test.jsp</result>
</action>

【问题讨论】:

    标签: java jsp validation struts2


    【解决方案1】:

    我尝试了使用 -validator.xml 的客户端验证以及通过覆盖 validate 方法使用的服务器端验证。

    它们都是服务器端验证,都由验证拦截器执行,并且都是can be tweaked to be run for an action alias only。

    然后用你的 struts.xml:

    <action name="testAction" 
           class="testAction" 
          method="execute">
    ...
    </action>
    
    <action name="displayAction" 
           class="testAction" 
          method="display">
    ...
    </action>
    

    假设您只想验证第一个操作,您可以执行以下操作:

    1. 使用testAction-testAction-validation.xml(动作名称+动作别名),而不仅仅是testAction-validation.xml;

    2. 使用validateTestAction(){} 方法,而不仅仅是validate()。

    还有take a look at how the whole thing works,因为你没有定义任何INPUT结果,这很可疑:)

    【讨论】:

    • 感谢您的回复 Andrea。我已经理解了这个概念,但它不能按照我的要求工作。将进一步更新您...再次感谢。
    • Andrea...我在 test.jsp 中做了一些修改。请看一下。现在单击按钮,我通过 javascript 调用操作,因为我想以新的方式显示图表窗口。所以当我单击按钮时发生了什么,它根据操作中的逻辑(验证方法)进行验证,但是在弹出窗口中打开相同的页面并且错误消息显示在那里而不是原始页面。所以我需要的是..单击按钮时,如果验证失败,则不应打开弹出窗口,但应在同一页面上显示错误消息..
    • Andrea..你有什么建议吗?
    • 对我来说听起来像是一个新问题 :) 顺便说一句,我现在正在打电话,打开一个新问题,明天我会尝试回答
    【解决方案2】:

    如果您不想验证某些操作,只需在操作方法上添加@SkipValidation 注释即可。这个答案shows how to use this annotation,这个答案shows an alternative approach。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-08
      相关资源
      最近更新 更多