我见过一些关于从使用此库的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>
答案 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
}
}