Java 要通过用户调用的JSP文件';在分析失败时删除数据
我有一个应用程序使用Struts 2框架在Tomcat中运行。它工作得很好,但我有一个关于控制流的基本问题 我的struts.xml文件包含许多具有名称、方法和类参数的“action”标记。包含的“result”标记确定指定方法完成其工作时控件的位置。所有这些都是有道理的,而且效果很好 我的许多JSP文件都包含一个HTML“form”标记,在提交表单时调用我的一个操作。我不知道的是,当在方法中执行的分析失败时,如何返回调用JSP 下面是我想做的一个总结 (1) 用户将“输入”值放入表单并单击提交 (2) 操作调用的方法检索表单数据并执行分析 (3) 当分析中的某个条件失败时,用户屏幕上会重新显示上一个JSP文件,并填写相同的输入数据,并且会出现一个对话框来解释问题Java 要通过用户调用的JSP文件';在分析失败时删除数据,java,jsp,tomcat,struts2,Java,Jsp,Tomcat,Struts2,我有一个应用程序使用Struts 2框架在Tomcat中运行。它工作得很好,但我有一个关于控制流的基本问题 我的struts.xml文件包含许多具有名称、方法和类参数的“action”标记。包含的“result”标记确定指定方法完成其工作时控件的位置。所有这些都是有道理的,而且效果很好 我的许多JSP文件都包含一个HTML“form”标记,在提交表单时调用我的一个操作。我不知道的是,当在方法中执行的分析失败时,如何返回调用JSP 下面是我想做的一个总结 (1) 用户将“输入”值放入表单并单击提交
有一件事我不知道如何做,那就是让该方法触发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>