2011-12-14 52 views
0

我已经看到了一些关于发送和构建jgGrid从使用这些库的struts.xml web应用程序上注册的操作的文章。但我还没有看到如何从网格中捕获处理后的数据。我的代码:从客户端JS代码发送数据到Struts 2 ActionSupport类

jQuery("#bedata").click(function(){ 
    jQuery('#rowed3').jqGrid('restoreRow',lastsel); 
    var gridData = jQuery("#rowed3").getRowData(); 
    var postData = JSON.stringify(gridData); 
    alert("JSON serialized jqGrid data:\n" + postData); 
    $.ajax({ 
     type: "POST", 
     url: "CargaTabla.action", 
     data : { 
      jgGridData: postData, 
      customData: "someinfo" 
     }, 
     dataType:"json", 
     contentType: "application/json; charset=utf-8", 
     success: function(response, textStatus, xhr) { 
      alert("success"); 
     }, 
     error: function(xhr, textStatus, errorThrown) { 
      alert("error"); 
     } 
    }); 
}); 

id = betadata按钮将数据发送到 “CargaTabla.action”,在Struts 2的配置文件中注册一个动作。数据被正确序列化为JSON字符串。 ClassActionImpl是抓这个动作的类,有没有什么方法可以获得Javascript发出的信息?如果没有使用JSP请求或类似的东西,Struts 2有什么方法可以获取这些数据,只需要在同一个ClassActionImpl.execute()的Java代码?一些隐藏的参数?

谢谢。

struts.xml的

<action name="CargaTabla" method="guardarUsuario" class="org.json.JSONRespuestaTabla"> <result name="success" type="json"> 
<param name="includeProperties">jgGridData</param> 
</result> 
</action> 

回答

0

那么Struts2的已建立机制来接收数据被请求的动作类送。 在你的情况我相信你是什么格式的代码发送数据给行动特别jgGridData。但对于第二个参数,所有你需要做的就是定义一个属性发送以下数据\

jgGridData: postData, 
customData: "someinfo" 

不知道您的操作类名称为customData及其getter和setter,请求执行过程中的struts2 param拦截器将查找与请求参数名称类似的属性,并尝试在操作类中的尊重属性中设置该值。

public class ClassActionImpl extends ActionSupport{ 

    private String customData; 
    private String jgGridData; // I am assuming data as string you can change it as per your data type 

//getter and setter for both above properties 

    public String execute() throws Exception{ 
    //can use both the above properties here as they will be filled by fraework 
    } 

} 
+0

您好,感谢您的回复。问题是,当CargaTabla。动作是从Struts 2框架中调用的,jgGridData存取器被称为GETTER,而不是SETTER,所以,我无法获取客户端发送的信息: 它调用jgGridData GETTER,而不是SETTER,所以我不能从客户端捕获数据。 – Raph 2011-12-15 11:18:57

+0

@Raph我恐怕我无法完全忍受这一点。你可以多描述一下 – 2011-12-15 11:47:05

1

好的Umesh。我在这个社区还是新手,但我还是无法为你打分。 。:(对不起,我欣赏了这么多你的努力 嗯,我解决了该问题好像支柱犯规像“POST”的方法自动填充属性:。

$.ajax({ 
    type: "GET", 

相反:

$.ajax({ 
    type: "POST", 

而且如果我有一个属性名称“customData”,这意味着它会自动访问其setter方法并填充客户端发送的数据,如果没有像某个参数那样调用的属性,Struts 2只需忽略数据,不需要在struts.xml文件中配置任何其他内容,只需执行以下操作:

 <action name="CargaTabla" method="guardarUsuario" class="org.json.JSONRespuestaTabla"> 
     <result name="success" type="json"/> 
    </action> 

这一次很有趣,很奇怪;不需要声明任何参数。 struts.xml中的参数标签仅用于将数据发送到Web客户端。如果您想要或不填充ActionClass的某些属性,则无法过滤。我想了解更多关于Strut2客户端管理的数据。也许有一些拦截器可以帮助解决这个问题。

再次感谢您。 Raph

相关问题