2014-01-20 20 views
0

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

我的方法:表单

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

jsp页面代码:

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

回答

0

如果我正确理解你。

在你的struts.xml

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

把你Action responsehttpheader,这将反映无刷新页面即响应将得出同样的JSP页面,你可以打印你使用的Action class设置变量该变量的setter

而在你的JSP处理基于结果

代码为

$.ajax({ 

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

我不是在JSP Ajax代码的语法非常肯定。试着这样做。

+0

我试过了。它只是给了我一个空白页面。我试图使用GET和POST方法,以相同的结果 –

+0

也,我试图读取变量的值使用

+0

我已编辑我的答案签出。 – Babel

0

你为什么不尝试用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的条目。

+0

这是什么意思:*你甚至不需要struts XML *中的条目?您可以直接使用''而不是使用'',而不使用'id'属性,该属性不建议使用。 –

相关问题