struts2如何实现弹出action返回的错误信息。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2如何实现弹出action返回的错误信息。相关的知识,希望对你有一定的参考价值。

我想的是在action里设置一个变量message存储错误提示信息,并设置了get() set()方法,在页面的js里如何获得action传递过去的值啊,我打算在js里定义一个变量接受action传递过来的参数,然后用alert提示框把值弹出来,该怎么做啊?

方法1:
在跳转的页面写入如下代码:
<script type="text/javascript">
//错误提示信息
var msg=""+\'$request.tipMessage\';
if(msg!="")
alert(msg);

//-->
</script>
在对应的action中写入如下代码:
message = "课程已结束无法报名!";
request.setAttribute("tipMessage", message);
这样就完成了。

方法2:
直接在action中写入如下代码:
PrintWriter outjs = response.getWriter();
outjs.print("<script>alert(\'成功\');window.location.reload();</script>");
return null;
首先,response.getWriter()需要try,catch;而且有编码问题。
window.location.reload();如果发现页面一直刷新不跳转;请把这句话去掉。
参考技术A var mes='$message' ;
alert(mes);追问

这样也不行啊,提示undefined

追答

你message值传到页面了么?
var mes = ""+'$message';
if(mes!="")
alert(mes);
试试

追问

还是不行的,这样弹出的是message,没有别的。

追答

不会吧!如果没值的话应该弹出空的,var mes = ""+'$request.message';你改成这样试试

追问

不是的啊,那个引号一起来的话肯定是弹出引号内部的内容啊,我的那个message信息没有保存到request对象中去,是在action中定义的message,然后设了get set方法。

追答

$是个转义符啊,你不会这个符号也能弹出来吧?在action中定义的message就是放在request对象中的,你在JSP中用request对象也可以获取到的。

追问

不放request里面可以吗?如果放request里面的话就意味着我每个要弹出错误的地方都要把那个错误信息塞到request作用域中,那样的话工作量会恨到的,我想的是不塞到那个作用域中,直接get set之后,在页面取这个值。

追答

web开发就是要通过request这些作用域把数据动态的传给客户端啊。
struts2里的Action的成员变量就可以传给JSP信息,不需要显示的把那个错误信息塞到request作用域中,在页面就可以取这个值。struts2把request对象封装起来了。你给页面传值的时候不是也是用这种成员变量么。

追问

我的意思是不用在每个要传message的地方设置request.setAttribute()然后赋值进去,每个页面再来个request.getAttribute()取值,然后赋给变量,然后弹出变量。

追答

我没说要这样写啊。struts2都是用成员变量传值的,现在是你要在JS代码里获取到ACTION的值啊,var mes = ""+'$request.message';中的request只是指定下作用域,action里代码不用改的

追问

那在action里要把我要传的参数set到request作用域中吗?

追答

不用,成员变量就可以了,要有get方法

追问

好的,谢谢了。

本回答被提问者和网友采纳
参考技术B 0

如何使用 jQuery 调用 Struts Action 类并在屏幕上显示数据

【中文标题】如何使用 jQuery 调用 Struts Action 类并在屏幕上显示数据【英文标题】:How to call the Struts Action class and display the data on screen using jQuery 【发布时间】:2014-11-03 16:26:23 【问题描述】:

我有 JSP,我在其中以表格格式显示数据列表。每个列中的一列将有 3 个不同的链接。在 Action 类中有 3 种不同的方法,以便在单击链接时触发相应的方法。一旦该方法从 Action 类返回数据,将根据 Action 类返回的列表大小追加行数。我正在使用 struts 迭代器进行迭代并添加&lt;tr&gt;。我已经编写了 jQuery 来执行该操作,并且一切正常。

新要求是当我点击第一个链接时,它应该显示记录集。当我再次单击第一个链接时,应删除显示的记录集。它有点切换记录集。

为了实现这一点,我创建了一个 div 组件,其中将添加新的记录集并尝试这样做,但它没有按预期工作。附上了每个文件的源代码摘录。请让我知道你的想法。

JSP 文件:

<s:iterator value="#mbean.myList" var="poItem">
    <tr>
        <td class="matlNumber">&nbsp;</td>
        <td><s:property value="#poItem.doc" /></td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td><s:property value="#poItem.weekOne" />  </td>
        <td><s:property value="#poItem.weekFive" /></td>
    </tr>
</s:iterator>

JS 文件:

$(".poLink").click(function()      
    var myData = $(this).closest('tr').find('td:first').text();
    document.forms[0].action = "poListMaterialPlanning.action?myData ="+myData ;
    document.forms[0].submit();

我尝试使用$.ajax(),但无法将Action 类返回的数据分配给JSP 中的struts 变量。

【问题讨论】:

为什么不直接显示/隐藏这个列表? 那么到底是什么问题?获取数据?显示隐藏? poLink 是什么? @AleksandrM:我尝试了显示/隐藏,但是如果不操作 DIV 标签,您将如何显示/隐藏记录列表?我有行 说 1 到 20,我想显示/隐藏第 6 到 15 行(这可能在运行时有所不同)。我通过为 6 yo 15 的行列表分配一个 ID 来尝试它,但它只隐藏了第 6 行,而不是其余的行。我知道 ID 应该是唯一的,因此更改为切换行的类属性。因为这 6-15 行有两个类,所以我无法切换。 @TJ:嘿,poLink 是其中一个链接,我点击它,从数据库中获取数据并将其显示在屏幕上。此外,数据的切换是点击 poLink @Anand:是的,您可以根据某些类别切换项目。 因为我有两个类用于这 6-15 行,所以我无法切换是什么意思?这应该不是问题。 【参考方案1】:

前提:句子

无法将 Action 类返回的数据分配给 JSP 中的 struts 变量。

错了,因为there is nothing like a "Struts variable" in the rendered HTML page。

也就是说,有几种方法可以实现您的目标(虽然不完全清楚):

    渲染页面时加载内容,然后hide / show it through javascript;这是最快的方法,但在某些情况下不鼓励这样做,例如:

    页面加载后内容可能已被更改,因为其他用户或软件对其进行了更新; 它太大了,无法加载所有记录,内存占用和页面加载时间变得不可接受。

    通过标准 POST/GET 提交添加/删除内容;这是老办法,你重新加载所有内容,重新加载所有内容,并且必须手动处理锚点和与页面相关的操作。

    通过 AJAX 调用添加内容,并通过 javascript(原始 javascript、jQuery、struts2-jQuery-plugin 或其他库)将其删除;如果解决方案 n.1 不适合您的情况,这可能就是您所需要的。

要坚持可简化工作的当前标准/最佳做法/工具,您应该使用:

Struts2-jquery-plugin 代替原始 jQuery 来执行 AJAX 调用。看一下展示,包括 AjaxWidgets 部分。您可能正在寻找 Ajax->Div->Div - Reload 示例。那么 return a JSP snippet in a target div,或者 一个 JSON 对象,您将通过 javascript 手动解析它以构建输出(更少的网络流量,但更多的工作),或提供给 struts2-jquery 标记。顺便说一句,如果是 JSON,最好use struts2-json-plugin, that will help you a lot

旁注:如果你注入一个包含其他struts2-jquery标签的JSP sn-p,you need to read this。

【讨论】:

@AleksandrM 谢谢。这可以链接到未来用户要求struts2 + ajax + jquery + json + dunno nothing about 'em,所以我认为值得进行数据挖掘工作:) 好吧,在这种情况下,我还要注意,从长远来看,raw jQuery 可能会更好/不太容易。 是的,从长远来看,特别是如果您使用 Struts2 以外的其他框架。但我想这是在稍后的时间(然后对有经验的用户来说变得很明显),这个答案针对尚未进行任何 AJAX 调用的用户...... struts2-jquery 插件已经成熟并且比原始 jQuery 容易得多, 首先。但是 +1 以突出显示评论:) @AndreaLigios:感谢您的建议。我认为您的第一个建议可以解决我的问题。如果我获得了进行 AJAX 调用的第三个选项,我将如何分配列表。当前的数据结构是 matBeanList 具有 poBean 列表。当我调用 matBean 时,它会进行 AJAX 调用并返回该特定 matBean 的 poBean 列表。我如何将新的 poBeans 列表放入 AJAX jQuery 中的原始 matBeansList 中? 我想您应该尝试并最终提出一个新问题,包括您的代码和对什么不起作用的描述(如果有)。如果此答案有助于消除您的疑虑和原始问题,请考虑接受并投票,谢谢。

以上是关于struts2如何实现弹出action返回的错误信息。的主要内容,如果未能解决你的问题,请参考以下文章

struts2做登录,如果失败,怎么用对话框弹出错误信息

Struts2Action类实现

[译]Javascript中的错误信息处理(Error handling)

struts2_Action的三种实现方式

ajax如何获取struts2的action的返回信息?

Struts2_Action