【问题标题】:how to carry the value of <s:actionerror/> from one jsp page to another?如何将 <s:actionerror/> 的值从一个 jsp 页面传送到另一个页面?
【发布时间】:2012-05-06 20:17:59
【问题描述】:

这里是: 我正在通过这个刷新一个名为 index.jsp 的页面

<head>
        <meta http-equiv="Refresh" CONTENT="0;URL=populatefields.action">

</head>

它在召唤我的行动。这是我的 struts.xml 中的映射

 <struts>

        <package name="com.action" extends="struts-default">
            <action name="*fields" method="{1}" class="com.action.RegisterAction">
    <result name="populate">/register.jsp</result>
    <result name="fields">/success.jsp</result>
<result name="error">/index.jsp</result>
    </action>

我在这里所做的是加载 index.jsp,我用这个 url 'populatefields.action' 刷新了它。这将调用我的操作类和 populate 方法(通配符方法调用)。Populate 方法从数据库中选择条目并将它们分配给表单字段属性和 returns "populate";Which 控制 register.jsp 已经填充了一些值。[即根据当前用户动态填写部分表单]

在 register.jsp 上,如果有一些验证检查,比如 if(getUssername.equals("")) {this.addActionerror("Empty field -Uname-"); return error;}

问题是在返回“错误”时,控件转到 index.jsp,然后填充方法并填充自动字段,但填充方法不会引发任何错误,因此为空...或错误丢失... 知道如何访问这些错误吗?通过在我的动作课中设置 dem 全局? actionerrors 出现在 index.jsp 中,但我想在每次加载时刷新该页面以从数据库中选择值...我可以将操作错误的值从一个 jsp 页面带到另一个页面吗?

【问题讨论】:

  • 如果您想要更复杂的动态行为,您只能使用 html 到此为止。最简单的方法是使用 AJAX。这里有很多使用 JSON 插件的例子。您可以通过将错误推送到会话中来实现您的要求,但这将是一个脆弱的解决方案,不适用于多种 Web 应用程序,因此最好坚持使用在大多数情况下都有效的方法。
  • 检查我的答案了吗!

标签: jsp struts2 struts struts-validation struts-html


【解决方案1】:

完成:我从没想过会这么容易.. 不需要传输&lt;s:actionerror/&gt; 的值。但是如果它不刷新并且只包含&lt;s:actionerror/&gt; 标签,您可以使用&lt;jsp:include page='index.jsp'&gt; 传输整个页面。就像您使用&lt;a&gt; 链接来调用您的操作时一样,在这种情况下不会刷新其操作方式。但在我的情况下,我想要刷新,就这样吧:

就在你输入返回错误之前;在您的执行方法中复制您的填充方法的内容。比如

execute{
if(validation fails){populate method content(leave the return statement); 
  return error;
 }
else
return success;
}

在struts.xml 中改变这个result name="error">/register.jsp</result>而不是&lt;result name="error"&gt;/index.jsp&lt;/result&gt;

也无需在 index.jsp 中写入&lt;s:actionerror&gt;,因为您现在将其重定向到 register.jsp,所以只需将其写入 register.jsp...

现在刷新基础正在工作,带您注册表格.. 如果验证失败,请立即尝试提交,将使用填充字段调用同一页面:D 和操作错误...

【讨论】:

  • 通常这可以通过使用"input" 结果作为表单来轻松处理。 S2 将在验证失败时自动转发到输入结果。看起来您正在做一堆手动工作,而框架已经具备相应的功能。
  • 是的,如果您命名了,您有一个名为 myform-input.jsp 的输入表单并使用了约定插件,您可能无需执行任何操作,只需遵循命名约定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-04
  • 2014-04-17
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 2019-03-12
相关资源
最近更新 更多