【问题标题】:Ajax error struts2?ajax错误struts2?
【发布时间】:2014-01-14 17:37:35
【问题描述】:

我在我的行动课上:

try{

        tspNameIdMap = slsReqMgmtCommonRemote.getTspNameIdMap(Integer.parseInt(circleId));

        throw new ReqMgmtException("Message test");
    }
    catch(ReqMgmtException rEx){

        addActionError("Action-Error: Request Management Exception thrown");
        return ERROR;
        }

我正在进行 AJAX 调用并使用 Struts2-Json-plugin 以 JSON 形式获取 tspNameIdMap

JS:AJAX 的一部分:

success: function(data){
                alert('Updated DB');
            },
            error: function(data){
                alert(data);
            }

我的struts.xml

<action name="findTspNameIdMap"
            class="cdot.oss.cmsat.gma.struts.ConfigureTspThresholdAction" method="findTspNameIdMap">
            <result name="success" type="json">
                <param name="root">
                    tspNameIdMap                    <!-- tspNameIdMap will be returned in JSON form -->
                </param>
            </result>
        </action>

我希望我的 addActionError 消息出现在我的 Ajax 错误函数中。我还想在我的 JSP 中显示它。我怎样才能得到这个?

Ps:我必须在属性文件中包含此 ActionError 消息吗?我是第一次使用它。帮助

编辑:当我关注@Prabhakar 的回答时,我收到了错误消息,但它在 AJAX 调用的 success 中返回。

另一个问题是,当我把它放在我的 JSP 中时,actionerror 没有显示出来。

Jsp:

<s:if test="hasActionErrors()">
       <s:actionerror />
</s:if>

【问题讨论】:

  • 检查我更新的答案。
  • 你想在同一个jsp中显示动作错误??

标签: java ajax jsp struts2 struts2-json-plugin


【解决方案1】:

请检查以下内容

在您的 struts.xml 中编辑以下内容

<result name="success" type="json">
  <param name="ignoreHierarchy">false</param>
    <param name="includeProperties">
        actionErrors.*,
        actionMessages.*,
        fieldErrors.*
    </param>
</result>

并在您的 js 代码中编辑以下内容。

    var actionErrs= (data.actionErrors); // list of action errors
    var actionMsgs= (data.actionMessages); // list of action messages
    var actionFldErrs= (data.fieldErrors); // list of field errors

   var alertMessage="";
    var i=0;
    for(i=0;i<actionErrs.length; i++){
    alertMessage=alertMessage+" "+actionMessages[i];
    }

    alert(alertMessage);

编辑 在您的 JSP 而不是以下内容中,

<s:if test="hasActionErrors()">
       <s:actionerror />
</s:if>

使用

<div id="err"></div>

并在js代码

中添加以下行
document.getElementById("err").innerHTML=alertMessage;

检查结果名称

如果您的方法签名如下所示,

public String getJsonData(){
if(....){
return ERROR;
}
return SUCCESS
}

您可以在您的js代码中获取数据,如下所示,

var actionErrs= (data.actionErrors); // list of action errors
var actionMsgs= (data.actionMessages); // list of action messages
var actionFldErrs= (data.fieldErrors); // list of field errors

var resultName=(data.getJsonData); // get The method return value

var alertMessage="";
var i=0;
for(i=0;i<actionErrs.length; i++){
alertMessage=alertMessage+" "+actionMessages[i];
}

alert(alertMessage);

【讨论】:

  • @Prabhaskar : 如果我想使用 actionError 怎么办??
  • 成功时,我想返回 tspNameIdMap,当返回错误时,我想要 actionErrors
  • struts.xml中无论是错误还是成功返回,数据都返回给AJAX调用的成功函数。那么我应该如何区分我想要的JSON数据是来还是错误paga???
  • 您可以在同一页面中使用json数据检查结果名称成功或错误,而不会出现任何其他错误结果。检查我的答案。
  • 我理解您上次的编辑。你如何从 js 代码调用动作类函数,即 getJsonData?再来一次?
【解决方案2】:

您可以配置 result ERROR 以将呈现的错误页面片段返回到 Ajax 响应。

<result name="error">/error.jspx</result>

error.jspx:

<%@ taglib prefix="s" uri="/struts-tags"%>
<%
    request.setAttribute("decorator", "none");
    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
%>
<s:if test="hasActionErrors()">
       <s:actionerror />
</s:if>

【讨论】:

  • 我不需要使用 actionErrors.* ??????
  • 结果是dispatcher类型,所以没有属性。
  • 我照你说的做了。但是,没有显示错误 jsp。它保留在同一个 jsp 上,并且错误 jsp 作为 AJAX 调用的结果返回。因此,我的下拉列表中充满了错误 jsp 的 html,其中 JSON 数据必须通过 AJAX
  • 您可以使用jQuery选择器和html()函数将html填充到页面上的任何div。
  • if(typeof data !== 'object') {//this is HTML
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多