【问题标题】:<html:errors> struts tutorial or example<html:errors> struts 教程或示例
【发布时间】:2009-06-02 01:34:33
【问题描述】:

我正在尝试在 Struts 中创建一个登录页面。这个想法是验证用户是否存在等,然后如果有错误,则返回登录页面,错误为红色(典型登录或任何表单页面验证)。

我想知道是否有人知道 Struts 中的错误管理教程。我正在寻找专门的教程(或示例)

<html:errors>

标签,我认为这可以解决我的问题。

【问题讨论】:

    标签: java jsp struts struts-validation


    【解决方案1】:

    这是一个: //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>
    

    现在当&lt;html:errors/&gt;标签被处理后,会变成:

    <h3><font color="red">Errors:</font></h3><ul>
    <li>Bad input: 'xxyyzzz' is invalid.<li>
    </ul>
    

    【讨论】:

    • 这当然是一个丰富多彩的答案,不是吗?我还没有掌握这里的格式化是如何工作的。
    • 非常感谢您的回答!我仍在尝试验证(按照你的建议,它们真的很好!我需要这样的东西,都在同一个地方解释)我会在它起作用时告诉你! ;)
    • 对此的最佳解释在 Sue Spielman 所著的《Struts 框架:Java 程序员实用指南》一书中,ISBN 1-55860-862-1。第 5 章。一步一步来。
    【解决方案2】:

    这里有一个简短的总结。你有一个ActionForm 类,比如MyForm

    <form-bean name="myForm" type="myapp.forms.MyForm"/>
    

    你有一个Action 类,比如MyAction

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

    action中的“name”指的是form-b​​ean中的“name”。因为你有validate="true" 你的ActionFormMyForm 必须定义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= parm)并展开 html.errors 标记以显示来自 ActionErrors 的错误。

    【讨论】:

    • 谢谢!经过几个小时的工作,我终于可以验证我的表格了。最后,我更喜欢在 bean 中验证而不是在操作中验证,并使用了 validation.xml(用于 minlenght、必需等)和数据库验证(用户存在,密码正确......)。我唯一需要更改的是使用 ActionErrors 的“.add(String, ActionError)”,因为已弃用(Struts 1.2.x)并使用了本质上相同的“.add(String, ActionMessage)”。再次,非常感谢您的回答!
    • @Mark Lutton:如果表单是从另一个动作开始创建的(例如,某些单选按钮的标签/值是从数据库中检索并放入请求中的),单选按钮如何与错误一起再次显示(在需要选择单选按钮的情况下)?当我提交表单时,我没有成功显示它们(仅打印错误)。
    【解决方案3】:

    在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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-20
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      • 2011-07-04
      • 2012-02-01
      • 2017-01-07
      相关资源
      最近更新 更多