如何在不刷新struts2中的页面的情况下执行动作类方法



我正在使用struts2开发一个应用程序。我在JSP页面中有一个按钮,该按钮在单击时执行一个操作方法。我想执行此操作方法,但不要刷新页面。有什么办法可以实现这一目标?操作的作用是设置整数的值,我只需要在页面上显示它。

我的方法:

public void setVariable(){
    //Code to get a random integer
    return "SUCCESS";
}

jsp页面代码:

<form method="post" action="setVariable">
    <input type="submit" value="Submit" />
</form>

为什么不尝试使用Ajax做到这一点?您可以执行操作,操纵数据,然后在JSP中获取结果?

在JSP中:

function javascript_function(inputIfAny)
{
    $.getJSON("<s:property value='%{ajaxCallUrl}' />",
        { value: value},
            function(data)
            {
                dataAttributeValue = data.valueToSendToJSP; // If needed
            });
}
<s:url id="ajaxCallUrl" action="actionName" method="ajaxMethod" />

在您的Struts 2动作中:

public void ajaxAccountUpdateHandle()
{
    Map<String, Object> params = ActionContext.getContext().getParameters();
    String value = params.get("numAcn");
    try
    {
        JsonFactory f = new JsonFactory();
        JsonGenerator generator = f.createJsonGenerator(response.getOutputStream());
        // Do stuff
        generator.writeStartObject();
        generator.writeStringField("valueToSendToJSP", "foo");
        generator.writeEndObject();
        generator.flush();
        generator.close();
    }
    catch (JsonGenerationException e)
    {
    }
    catch (IOException e)
    {
    }
}

这样,您甚至不需要Struts XML中的条目。

如果我正确理解您。

在您的Struts.xml

<action name="yourAction" class="ActionClass" >
   <result name="success" type="httpheader" >
      <param name="status">202</param> 
          </result>
 </action> 

将您的Action response转动为httpheader,这将反映出没有任何页面刷新,即响应将进入同一JSP页面,您可以使用该变量的setterAction class中打印所设置的变量。

在您的JSP中,根据结果处理代码

AS

 $.ajax({
     statusCode:{202:function()
                {
           alert("result was success");
                  }}
             });

我不太确定JSP中的Ajax代码的语法。尝试以这种方式做。

相关内容

最新更新