将数据从客户端JS代码发送到Struts 2 ActionSupport类

时间:2011-12-14 18:32:00

标签: struts2 client

我见过一些关于从使用此库的struts.xml Web应用程序上注册的操作发送和构建jgGrids的帖子。但我还没有看到如何从网格中捕获处理过的数据。我的代码:

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发出的信息? Struts 2有没有使用JSP请求或类似的东西来获取这些数据,只是同一个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>

2 个答案:

答案 0 :(得分:1)

好的Umesh。我是这个社区的新手,但我还没有得分。 :(抱歉。我非常感谢你的努力。 好吧,我解决了这个问题。似乎struts不喜欢“POST”方法来自动填充属性:

    $.ajax({
    type: "GET",

相反:

    $.ajax({
    type: "POST",

无论如何它都会自动访问setter方法的名称。如果我有一个属性名称“customData”,这意味着它将自动访问其setter方法并填充从客户端发出的数据。如果没有被称为某个参数的属性,Struts 2就会忽略这些数据。无需在struts.xml文件中配置任何其他内容。只是行动:

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

这是非常有趣和奇怪的;无需声明任何参数。 -param- in struts.xml标记仅用于向Web客户端发送数据。如果要填充ActionClass的某些属性,则无法过滤。我想更多地了解Strut2中客户端管理的数据。也许有一些拦截器可以帮助解决这个问题。

再次感谢你。 拉夫

答案 1 :(得分:0)

Struts2构建了一种机制来接收请求发送给action类的数据。 在您的情况下,我相信您正在发送以下数据\

jgGridData: postData,
customData: "someinfo"

不确定此代码以何种格式将数据发送到操作,尤其是jgGridData。但是对于第二个参数,您需要做的就是在动作类中定义名称为customData的属性及其getter和setter,请求执行过程中的struts2 param拦截器将查找与请求参数名称类似的属性,并尝试在操作类中的espected属性中设置值。

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
   }

}