<html:errors> Struts 教程或示例

7
我正在尝试在Struts中制作登录页面。想法是验证用户是否存在等,如果出现错误,则返回带有红色错误的登录页面(典型的登录或任何表单页面验证)。我想知道是否有人知道Struts中的错误管理教程。我特别寻找一个教程(或示例)。
<html:errors>

我认为可以使用标签来解决我的问题。

3个回答

16
这是一个例子: //struts.apache.org/1.3.5/struts-taglib/apidocs/org/apache/struts/taglib/html/package-summary.html#package_description
在此我假设使用的是Struts 1,不知道Struts 2是否有改变。
您可以将errors.header和errors.footer放入您的消息资源文件中:
errors.header=<h3><font color="red">Errors:</font></h3><ul>
errors.footer=</ul>

只有ActionErrors对象中有错误时,才会显示页眉和页脚。
在您的Action类中,执行以下操作:
ActionErrors errors = new ActionErrors();
if (badInput) {
  errors.add(ActionErrors.GLOBAL_ERROR,
    new ActionError("error.bad.input", badString);    // key in messages resource file
                                    // badString will replace {0} in message
}

然后在返回之前:
saveErrors(request, errors);

在您的消息资源文件中:
error.bad.input=<li>Bad input:  '{0}' is invalid.</li>

现在当处理<html:errors/>标签时,它将被转换为:
<h3><font color="red">Errors:</font></h3><ul>
<li>Bad input: 'xxyyzzz' is invalid.<li>
</ul>

这绝对是一个丰富多彩的答案,不是吗?我还没有掌握这里的格式设置。 - Mark Lutton
非常感谢您的回答!我仍在尝试验证(根据您的建议,它们真的很好!我需要像这样的东西,所有内容都在同一个地方解释)。当它起作用时,我会告诉您的!;) - Tere
最好的解释在Sue Spielman所著的《The Struts Framework: Practical Guide for Java Programmers》一书中,ISBN 1-55860-862-1。第5章。它是逐步进行的。 - Mark Lutton

10

这是一个快速摘要。你有一个ActionForm类,例如MyForm

<form-bean name="myForm" type="myapp.forms.MyForm"/>
你有一个叫做MyActionAction类:
```html

You have an Action class, say MyAction:

```
<action path="/insert" type="myapp.actions.MyAction" name="myForm"
   input="/insert.jsp" validate="true" />
  <forward name="success" path="/insertDone.jsp"/>
</action>

在这里,"name"指的是表单bean中的"name"。因为您在ActionFormMyForm上设置了validate="true",所以您必须定义一个validate()方法,该方法将被自动调用:

public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
  ActionErrors errors = new ActionErrors();
  if ((username==null) || (username.length() < 1)) 
      errors.add("username", new ActionError("error.username.required"));
  return errors;
}
如果返回一个空的ActionErrors对象,Struts会继续调用MyAction.execute()。否则,Struts会显示/insert.jsp(因为这是您给出的input=参数),并扩展html.errors标签以显示来自ActionErrors的错误。

谢谢!经过几个小时的工作,我终于能够验证我的表单了。最后,我更喜欢在bean中进行验证而不是在action中,并使用validation.xml(用于minlenght、required等)和数据库验证(用户存在,密码正确等)。我唯一需要改变的是ActionErrors的".add(String, ActionError)"因为它已经被弃用(Struts 1.2.x),并且使用".add(String, ActionMessage)"基本上是相同的。再次感谢您的回答! - Tere
@Mark Lutton:如果表单是从另一个操作开始创建的(例如,某些单选按钮的标签/值是从数据库中检索并放入请求中),那么在需要重新显示单选按钮并显示错误的情况下(例如必须选择单选按钮的情况)该怎么办?当我提交表单时,我无法将它们显示出来(仅打印错误)。 - Sefran2

0
在 Struts 操作中:
ActionErrors errors = new ActionErrors();
errors.add("", new ActionMessage("login.msg.err"));
saveErrors(request, errors);

"

"hello.msg.err"被定义在MessageBundle.properties中。

"
login.msg.err=Wrong user name or password

在你的JSP中,错误将通过h:errors标签显示:
<h:errors/>

这个视频会逐步向您展示并解释所有这些内容: https://youtu.be/YcCsJtqI72A

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接