当前位置: 代码迷 >> JavaScript >> struts2+jquery +json 中遇见有关问题总结
  详细解决方案

struts2+jquery +json 中遇见有关问题总结

热度:269   发布时间:2013-07-09 09:50:48.0
struts2+jquery +json 中遇见问题总结

1、最近使用? struts2+jquery +json 来实现无刷新的效果

,但遇见不少小问题;

1、页面

? <div class="index_right_2" >
????? <div? style="float:right">
??????? <input class="index_right_2_1"? type="button" name="add" id="add" value="新增"/>
??????? <input class="index_right_2_1"? type="button" name="update" id="update" value="修改"/>
??????? <input class="index_right_2_1"? type="button" name="delete" id="delete" value="删除"/>
????? </div>
?? </div>
??
?? <div class="index_right_3">
?? ??<table id="table2" width="100%" border="0px" cellspacing="2px" cellpadding="0px" style="table-layout:fixed;">
?? ???
?? ???<tr class="table_one_title">
?? ???? <th style="width:5%">选择</th>
?? ???? <th style="width:5%">序号</th>
?? ???? <th style="width:20%">编码</th>
?? ???? <th style="width:30%">名称</th>
?? ???? <th>备注</th>
?? ???</tr>
?? ??
?? ?? <s:iterator value="list"? status="st">
?? ???<tr class="table_one_content" id="showTr" >
?? ????? <td>
??? ?????? <input style="width:100%;height:23px"? id="checkbox" name="checkbox" type="checkbox" value="<s:property value="unitId" />" />
??? ???</td>
?? ????<td>
??? ?????? <input style="width:100%;height:23px"? id="indexNum" name="indexNum" type="text" value="<s:property value="num" />" />
??? ???</td>
??? ???<td>
??? ?????? <input style="width:100%;height:23px"? id="vCode" name="vCode" type="text" value="<s:property value="vCode" />" />
??? ???</td>
??? ???<td>
??? ?????? <input style="width:100%;height:23px"? id="vName" name="vName" type="text" value="<s:property value="vName" />" />
??? ???</td>
??? ???<td>
??? ?????? <input style="width:100%;height:23px" id="sMemo" name="sMemo" type="text" value="<s:property value="sMemo" />" />
??? ???</td>
??? ??</tr>
??? ??</s:iterator>
?? ???
?? ??</table>
??
?? </div>
?? </form>
?? </div>
??
?? <div id="unitedit" class="index_right_unitedit_middle" style="display:none">
??? <form id="editform" name="editform" >
????? <div class="index_right_unitedit_input">
????? ???? <input type="hidden" id="edit_unitId" name="baseVo.unitId" value="" maxlength="16" size="20" >
????? ??<label>编码:</label><input type="text" id="edit_vCode" name="baseVo.vCode" value="" maxlength="16" size="20">&nbsp;&nbsp;&nbsp;
????? ??<label>名称:</label><input type="text" id="edit_vName" name="baseVo.vName" value="" maxlength="50" size="39">
??????? </div>?

??????? <div class="index_right_unitedit_input">
????? ??<label>备注:</label><textarea rows="3" cols="75" id="edit_sMemo"? name="baseVo.sMemo"></textarea>
????? ?</div>
????? ?
????? ? <div class="index_right_unitedit_input" style="text-align:center">
????? ? ? <input class="index_right_2_1"? type="button" name="save" id="save" value="保存"/>
???????????? <input class="index_right_2_1"? type="reset" name="reset" id="reset" value="重置"/>
???????????? <input class="index_right_2_1"? type="button" name="editdel" id="editdel" value="取消"/>
????? ? <div>
????? </form>?
?? </div>

?

2、jq代码

?$('#update').click(function(){//修改
??????? var aa="";
??????? var iNum=-1;
??????? var unitId = "";
?????$("input[name='checkbox']:checkbox:checked").each(function(index){//遍历table打钩的信息
??????iNum = index;?//只有一条数据时,则为0,2条就是1
??????if(index==0){
???????unitId=$(this).val(); //获取选中的那一条数据的ID,不清楚怎么获取选中的那一行的所有数据
??????}
?????});
?????
?????if(iNum==-1){ //我上面定义为-1,如果没有打钩 则执行这条
????????? alert("请选择一条数据进行修改");
?????? return false;
?????}else if(iNum>0){? //??大于0 则 选择了多条
??????alert("只能选择一条数据进行修改");
?????? return false;
?????}else{
??????? $.ajax({
??????? ?url:'unitupdate',
?????? ??? ???dataType:'json',
?????? ??? ???type:'post',
?????? ??? ???beforeSend:function(){"这里可以打印一些信息,增加用户体验度"},
?????? ??? ???data:{
??????????? ????? 'unitId':unitId
??????? ?????},
??????? ?????success:function(data){??????????????

???????????? var infoArray = eval("("+data+")");//如果后台没有进行json的疯狂 直接返回pojo对象,这里可以不需要进行转化
????????????? // alert(infoArray["VName"]);? //这种方式与下面的 .都是可以获取值??
?????????????? $('#edit_unitId').val(infoArray.unitId);
??????? ?????? $('#edit_vCode').val(infoArray.VCode);
??????? ?????? $('#edit_vName').val(infoArray.VName);
??????? ?????? $('#edit_sMemo').val(infoArray.SMemo);
??????? ?????? document.getElementById("unitedit").style.display="";
???????? ???? document.getElementById("unitsearch").style.display="none";

?????? //页面是二部分,我用div来控制显示那部分
?????????????}
??????? ?????
??????? });
?????}
????});

?

?

3、struts.xml

<package name="unitjson" extends="json-default">
?? <action name="unitupdate" class="com.dms.base.strust.IndexLeftUnitAction" method="unitupdate">
??????? ?<result type="json">
??????? ??<param name="root">result</param>
??????? ?</result>
??????? </action>
?</package>

4、action?
?/**
? * 功能:公司修改传值功能
? * 编写时间:2013-07-03
? * @return
? */
?public String unitupdate(){
??System.out.println("22==="+unitId);;
??BaseVO baseVo = uBiz.findUnit(unitId);
??//转化文?json格式
??JSONObject json = JSONObject.fromObject(baseVo);
??result = json.toString();
??//this.setResult(jsonArray.toString());
??System.out.println(result);
??return SUCCESS;
?}
?

5、pojo?? set,get省略


public class BaseVO {
?
?private String unitId = "";// 单位表 bd_unit
?private String vCode = "";//编码
?private String vName = "";//名称
?private String vStatus = "";//状态? 1 有效? 0 无效
?private String sMemo = "";//备注
?
?private String deptId = "";//bd_dept? 部门表

?private String postId = "";//BD_POST? 职位表
?
?private String userId = "";//bd_user_info? 操作员表
?
?private String empId = "";//
?private String vCarNum = "";//卡号
?private String vSex = "";//?0? 男?? 1 女
?private String vCarId = "";//
?private String vInDate = "";//入厂日期
?private String swSate = "";//0? 离职? 1 在职??? 是否在职
?
?private int num = 0;
?

?

6、上面都是基本的配置信息,下面所说的就是遇见的问题;

6.1、在控制台:

{"VInDate":"","VCarNum":"","empId":"","VStatus":"",

"postId":"","SMemo":"","VName":"美化","num":0,"VCarId":"","VCode":"002","vsex":"",

"userId":"","swSate":"","deptId":"","unitId":"C0002"}

?

可以打印出 封装的json数据;

页面使用 下面2种方式均可以获取到值;

??? var infoArray = eval("("+data+")");

????? var name= infoArray["VName"]);??

??????var name2 = infoArray.VName);
不知道大家是否注意到? pojo里面定义的字段与json封装的字段名有部分不一样

?

还有一种方式 就是? 后台直接? 返回pojo 对象,不需要json那个封装方法;

?

?

6.2、包也要注意:

?

当我使用 JSONObject json = JSONObject.fromObject(baseVo);

时,从前端一跳到这个action执行这条语句就没反应,控制台没有错误信息

?

弄了很多才知道缺少ezmorph-1.0.6.jar、commons-httpclient-3.1.jar等包产生的;

?

?

?

?

?

?

?

?

?

?

?

?

  相关解决方案