Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 要通过用户调用的JSP文件';在分析失败时删除数据_Java_Jsp_Tomcat_Struts2 - Fatal编程技术网

Java 要通过用户调用的JSP文件';在分析失败时删除数据

Java 要通过用户调用的JSP文件';在分析失败时删除数据,java,jsp,tomcat,struts2,Java,Jsp,Tomcat,Struts2,我有一个应用程序使用Struts 2框架在Tomcat中运行。它工作得很好,但我有一个关于控制流的基本问题 我的struts.xml文件包含许多具有名称、方法和类参数的“action”标记。包含的“result”标记确定指定方法完成其工作时控件的位置。所有这些都是有道理的,而且效果很好 我的许多JSP文件都包含一个HTML“form”标记,在提交表单时调用我的一个操作。我不知道的是,当在方法中执行的分析失败时,如何返回调用JSP 下面是我想做的一个总结 (1) 用户将“输入”值放入表单并单击提交

我有一个应用程序使用Struts 2框架在Tomcat中运行。它工作得很好,但我有一个关于控制流的基本问题

我的struts.xml文件包含许多具有名称、方法和类参数的“action”标记。包含的“result”标记确定指定方法完成其工作时控件的位置。所有这些都是有道理的,而且效果很好

我的许多JSP文件都包含一个HTML“form”标记,在提交表单时调用我的一个操作。我不知道的是,当在方法中执行的分析失败时,如何返回调用JSP

下面是我想做的一个总结

(1) 用户将“输入”值放入表单并单击提交

(2) 操作调用的方法检索表单数据并执行分析

(3) 当分析中的某个条件失败时,用户屏幕上会重新显示上一个JSP文件,并填写相同的输入数据,并且会出现一个对话框来解释问题


有一件事我不知道如何做,那就是让该方法触发JSP文件的还原,而所有用户的值仍在表单字段中。

要使struts 2能够验证用户的输入,必须在action类中定义一个validate方法。比如说

public class UserAction extends ActionSupport{

    public void validate(){
        if(!firstName.equals("JimB77")){
            //addFieldError(firstName, "first name is not equal to JimB77");    
            addActionError("You have an error on your inputs..");
        }
    }

    public String performAnalysis(){
        System.out.println("perform analysis logic..");
        return SUCCESS;
    }


    private String firstName;
    private String lastName;

    //getters and setters

}
validate()方法将验证将在此类中调用的所有请求,要验证特定方法,只需添加validate+方法名。因此,我们将validate()更改为validatePerformAnalysis()

请注意addActionError和addFieldError,如果希望特定字段或输入出现错误,则应定义addFieldError。现在我使用的是addActionError,它用于一般错误消息。

有一件事我不知道怎么做,那就是让这个方法触发一个 还原JSP文件,其中所有用户值仍在 表单字段

Struts 2为您处理它。要保留输入的值,只需定义

<result name="input">/pages/user.jsp</result> 
/pages/user.jsp
例如,我们有一个动作,比如:

<action name="performAnalysis" class="x.y.z.action.UserAction" method="performAnalysis">
            <result name="success">pages/user.jsp</result>
            <result name="input">/pages/user.jsp</result>
        </action>

页面/user.jsp
/页面/user.jsp
这样,当验证失败并且struts 2返回如上所述的输入时,struts 2将重新显示user.jsp并保留您输入的所有值。它还将添加我们在addActionError方法中定义的错误消息。

现在显示错误消息。我们可以有这样的东西

<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>

<script>
var error="";
function showDialog(msg){
        alert(msg);
}
</script>
</head>

<body>

<s:form action="/performAnalysis" >

    <s:textfield name="firstName" />
    <s:textfield name="lastName" />
    <s:submit value="Submit" />

</s:form>
   <s:if test="hasActionErrors()">
      <s:iterator var="error" value="actionErrors"> //display all actionErrors similar to <s:actionerror />
        <script>
              error += "<s:property value='#error' />";
            </script> 
      </s:iterator>
      <script>
        showDialog(error);
      </script>
   </s:if>
</body>
</html>

var误差=”;
函数显示对话框(msg){
警报(msg);
}
//显示所有actionErrors,类似于
错误+=“”;
显示对话框(错误);

非常感谢您的详尽回答。我要花一点时间来吸收所有这些。再次感谢!我花了大量时间研究您的答案,并成功地实施了所有这些步骤。除了一件事-->当页面返回并显示错误消息时,JSP中的字段是空白的,其他一切都可以正常工作。我确实在struts.xml文件中添加了一个“input”结果,但是用户拒绝的输入值不会保留在JSP中。确保html中的输入字段和action类中的字段相同。你能发你的密码吗?我终于成功了!我的错误是我对用户数据使用了HTML的“输入”标记,而不是“s:textfield”。谢谢!我一直在努力理解Struts 2中的验证,您用简单的示例进行的清晰解释使我在这方面取得了巨大的进步。再次感谢您抽出时间为我做这件事。
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>

<script>
var error="";
function showDialog(msg){
        alert(msg);
}
</script>
</head>

<body>

<s:form action="/performAnalysis" >

    <s:textfield name="firstName" />
    <s:textfield name="lastName" />
    <s:submit value="Submit" />

</s:form>
   <s:if test="hasActionErrors()">
      <s:iterator var="error" value="actionErrors"> //display all actionErrors similar to <s:actionerror />
        <script>
              error += "<s:property value='#error' />";
            </script> 
      </s:iterator>
      <script>
        showDialog(error);
      </script>
   </s:if>
</body>
</html>