- 浏览: 82116 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
xiangpi1991:
如果复合主键中的属性并不是两个String类型的属性,而是两个 ...
JPA中复合主键的映射 -
huazhizui:
请问LZ,@Formula 修饰的属性支持自定义类型吗?还是只 ...
Hibernate 中的Formula 攻略(转载) -
lizi351120311:
[i][/i]
JFreeChar -
lizi351120311:
[b][/b]总结的挺好的哦,谢谢你的分享![
JFreeChar -
385104182:
支持你,我们一起不放弃
compass+paoding分词器与Spring的集成使用
代码请参照http://acheron.javaeye.com/admin/blogs/402499
JSON官方文档
http://www.json.org/json-zh.html
jQuery官方文档
http://docs.jquery.com/Main_Page
- <SPAN style="FONT-SIZE: small">function removerecordbyid(recordid){
- $("#showallrecord table tr").each(
- function(){
- var seq=parseInt($(this).children("td").html());
- var thisrecord = this;
- if(seq==recordid)
- if(confirm("您确认执行删除操作么?")){
- $.ajax({
- type: "POST",
- url:"removeRecordById.action",
- dataType:"json",
- data:{"msg.id":recordid},
- success:function(json){
- if(json.status==4){
- alert("删除失败,只有提交留言的ip才能删除");
- }else{
- $(thisrecord).remove();
- // alert("删除成功");
- }
- },
- error:function(){
- alert("del error");
- }
- });
- }
- });
- }
- function getrecordbypage(page){
- $.ajax({
- type: "POST",
- url:"listAllRecordByPage.action",
- dataType:"json",
- data:{"page":page},
- success:function(json){
- var strs="<table border=\"1\"><tr id='colattr'><td>key-id</td><td>昵称</td><td>留言时间</td><td width='120'>邮箱</td><td width='120'>博客</td><td width='250'>留言</td><td>操作</td></tr>";
- for(i=0;i<json.records.length;i++){
- str="<tr id='"+json.records[i].id+"' onclick='lineclick(this);'><td>"+json.records[i].id+"</td><td>"+json.records[i].from+"</td><td>"+json.records[i].addDate+"</td><td>"+json.records[i].mail+"</td><td>"+json.records[i].site+"</td><td>"+json.records[i].cont+"</td><td><a onclick='removerecordbyid("+json.records[i].id+");'>删除</a></td></tr>"
- strs=strs+str
- }
- strs=strs+"</table>"
- $("#showallrecord").html(strs);
- },
- error:function(){
- alert("error");
- }
- });
- };</SPAN>
function removerecordbyid(recordid){
$("#showallrecord table tr").each(
function(){
var seq=parseInt($(this).children("td").html());
var thisrecord = this;
if(seq==recordid)
if(confirm("您确认执行删除操作么?")){
$.ajax({
type: "POST",
url:"removeRecordById.action",
dataType:"json",
data:{"msg.id":recordid},
success:function(json){
if(json.status==4){
alert("删除失败,只有提交留言的ip才能删除");
}else{
$(thisrecord).remove();
// alert("删除成功");
}
},
error:function(){
alert("del error");
}
});
}
});
}
function getrecordbypage(page){
$.ajax({
type: "POST",
url:"listAllRecordByPage.action",
dataType:"json",
data:{"page":page},
success:function(json){
var strs="<table border=\"1\"><tr id='colattr'><td>key-id</td><td>昵称</td><td>留言时间</td><td width='120'>邮箱</td><td width='120'>博客</td><td width='250'>留言</td><td>操作</td></tr>";
for(i=0;i<json.records.length;i++){
str="<tr id='"+json.records[i].id+"' onclick='lineclick(this);'><td>"+json.records[i].id+"</td><td>"+json.records[i].from+"</td><td>"+json.records[i].addDate+"</td><td>"+json.records[i].mail+"</td><td>"+json.records[i].site+"</td><td>"+json.records[i].cont+"</td><td><a onclick='removerecordbyid("+json.records[i].id+");'>删除</a></td></tr>"
strs=strs+str
}
strs=strs+"</table>"
$("#showallrecord").html(strs);
},
error:function(){
alert("error");
}
});
};
注意dataType:"json"这个参数一定不能少,否则不能正确识别
一下是Struts action代码
- <SPAN style="FONT-SIZE: small">public class CrudMsgAction extends ActionSupport{
- private Record msg;
- private int index;
- private RecordService recordService;
- private List<Record> records;
- private int status = 0;
- private int page = 0;
- @JSON(serialize=false)
- public RecordService getRecordService() {
- return recordService;
- }
- //other getter and setter
- @Override
- public String execute() throws Exception {
- return SUCCESS;
- }
- /**
- * 返回所有记录的JSON数据
- * @return list . All of the record.
- * @throws Exception
- */
- public String listAllRecord() throws Exception{
- List<Record> list = recordService.listAllRecord();
- // List list = Arrays.asList(allRecord);
- // List<Record> list2 = (List<Record>)list;
- // Record rec = (Record)list.get(0);
- records = list;
- return SUCCESS;
- }
- public String listAllRecordByPage() throws Exception{
- List<Record> list = recordService.listAllRecord(page);
- records = list;
- return SUCCESS;
- }
- /**
- * 插入记录
- * @return update the view with AJAX when struts2 action return
- * @throws Exception
- */
- public String insertRecord() throws Exception{
- //插入留言日期设置
- msg.setAddDate(new Date());
- //获取客户端ip,setIpaddr
- String clientIpAddr = ServletActionContext.getRequest().getRemoteAddr();
- msg.setIpaddr(clientIpAddr);
- //判断是否为空
- if("".equals(msg.getFrom()))msg.setFrom("anonymous");
- if("".equals(msg.getMail()))msg.setMail("@");
- if("".equals(msg.getSite()))msg.setSite("-");
- if("".equals(msg.getCont()))msg.setCont("这家伙很懒,什么都没留下");
- recordService.insertRecord(msg);
- return SUCCESS;
- }
- /**
- * 通过索引查找记录
- * @return the field msg
- * @throws Exception
- */
- public String listRecordByIndex() throws Exception{
- List<Record> list = recordService.listAllRecord();
- this.msg = list.get(this.getIndex());
- return SUCCESS;
- }
- /**
- * 删除对应id记录
- * @return field status. in order to update view with AJAX
- * @throws Exception
- */
- public String removeRecordById() throws Exception{
- String clientIpAddr = ServletActionContext.getRequest().getRemoteAddr();
- Record r = recordService.listRecordById(msg.getId());
- if(clientIpAddr.equals(r.getIpaddr())){
- recordService.removeRecordById(msg.getId());
- return SUCCESS;
- }
- status = 4;
- return SUCCESS;
- }
- /**
- * 获得分页数
- * @return pageSize using field page
- * @throws Exception
- */
- public String getPageSize() throws Exception{
- page = recordService.getPage();
- return SUCCESS;
- }
- }</SPAN>
public class CrudMsgAction extends ActionSupport{
private Record msg;
private int index;
private RecordService recordService;
private List<Record> records;
private int status = 0;
private int page = 0;
@JSON(serialize=false)
public RecordService getRecordService() {
return recordService;
}
//other getter and setter
@Override
public String execute() throws Exception {
return SUCCESS;
}
/**
* 返回所有记录的JSON数据
* @return list . All of the record.
* @throws Exception
*/
public String listAllRecord() throws Exception{
List<Record> list = recordService.listAllRecord();
// List list = Arrays.asList(allRecord);
// List<Record> list2 = (List<Record>)list;
// Record rec = (Record)list.get(0);
records = list;
return SUCCESS;
}
public String listAllRecordByPage() throws Exception{
List<Record> list = recordService.listAllRecord(page);
records = list;
return SUCCESS;
}
/**
* 插入记录
* @return update the view with AJAX when struts2 action return
* @throws Exception
*/
public String insertRecord() throws Exception{
//插入留言日期设置
msg.setAddDate(new Date());
//获取客户端ip,setIpaddr
String clientIpAddr = ServletActionContext.getRequest().getRemoteAddr();
msg.setIpaddr(clientIpAddr);
//判断是否为空
if("".equals(msg.getFrom()))msg.setFrom("anonymous");
if("".equals(msg.getMail()))msg.setMail("@");
if("".equals(msg.getSite()))msg.setSite("-");
if("".equals(msg.getCont()))msg.setCont("这家伙很懒,什么都没留下");
recordService.insertRecord(msg);
return SUCCESS;
}
/**
* 通过索引查找记录
* @return the field msg
* @throws Exception
*/
public String listRecordByIndex() throws Exception{
List<Record> list = recordService.listAllRecord();
this.msg = list.get(this.getIndex());
return SUCCESS;
}
/**
* 删除对应id记录
* @return field status. in order to update view with AJAX
* @throws Exception
*/
public String removeRecordById() throws Exception{
String clientIpAddr = ServletActionContext.getRequest().getRemoteAddr();
Record r = recordService.listRecordById(msg.getId());
if(clientIpAddr.equals(r.getIpaddr())){
recordService.removeRecordById(msg.getId());
return SUCCESS;
}
status = 4;
return SUCCESS;
}
/**
* 获得分页数
* @return pageSize using field page
* @throws Exception
*/
public String getPageSize() throws Exception{
page = recordService.getPage();
return SUCCESS;
}
}
在上面代码中,使用了JSON注释@JSON(serialize=false),
除此之外,JSON注释还支持如下几个域:
name:指定Action属性被序列化成JSON对象的属性名。
serialize:设置是否序列化该属性
deserialize:设置是否反序列化该属性。
format:设置用于格式化输出、解析日期表单域的格式。例如"yyyy-MM-dd'T'HH:mm:ss"。
- <SPAN style="FONT-SIZE: small"><?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <constant name="struts.objectFactory" value="spring"/>
- <package name="json" extends="json-default">
- <action name="ajaxRequest" class="com.jun.demos.struts2json.HelloWorld">
- <result type="json" />
- </action>
- <action name="listIndexRecord" class="com.jun.demos.book.action.CrudMsgAction">
- <result type="json" />
- </action>
- <action name="listAllRecord" class="com.jun.demos.book.action.CrudMsgAction" method="listAllRecord">
- <result type="json" />
- </action>
- <action name="listAllRecordByPage" class="com.jun.demos.book.action.CrudMsgAction" method="listAllRecordByPage">
- <result type="json" />
- </action>
- <action name="insertRecord" class="com.jun.demos.book.action.CrudMsgAction" method="insertRecord">
- <result type="json" />
- </action>
- <action name="removeRecordById" class="com.jun.demos.book.action.CrudMsgAction" method="removeRecordById">
- <result type="json" />
- </action>
- <action name="getPageIndex" class="com.jun.demos.book.action.CrudMsgAction" method="getPageSize">
- <result type="json" />
- </action>
- </package>
- </struts></SPAN>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.objectFactory" value="spring"/>
<package name="json" extends="json-default">
<action name="ajaxRequest" class="com.jun.demos.struts2json.HelloWorld">
<result type="json" />
</action>
<action name="listIndexRecord" class="com.jun.demos.book.action.CrudMsgAction">
<result type="json" />
</action>
<action name="listAllRecord" class="com.jun.demos.book.action.CrudMsgAction" method="listAllRecord">
<result type="json" />
</action>
<action name="listAllRecordByPage" class="com.jun.demos.book.action.CrudMsgAction" method="listAllRecordByPage">
<result type="json" />
</action>
<action name="insertRecord" class="com.jun.demos.book.action.CrudMsgAction" method="insertRecord">
<result type="json" />
</action>
<action name="removeRecordById" class="com.jun.demos.book.action.CrudMsgAction" method="removeRecordById">
<result type="json" />
</action>
<action name="getPageIndex" class="com.jun.demos.book.action.CrudMsgAction" method="getPageSize">
<result type="json" />
</action>
</package>
</struts>
配置该Action与配置普通Action存在小小的区别。
包继承了json-default包,而不再继承默认的default包,这是因为只有在该包下才有json类型的Result。
result可以使用<param name="excludeProperties">page,index</param>
排除Action中这些都不返回的属性.
结合action中属性getter方法注解@JSON(serialize=false)灵活配置
异常解决:
- Nested in javax.servlet.ServletException: com.googlecode.jsonplugin.JSONException: com.googlecode.jsonplugin.JSONException: com.googlecode.jsonplugin.JSONException: com.googlecode.jsonplugin.JSONException: com.googlecode.jsonplugin.JSONException: com.googlecode.jsonplugin.JSONException: java.lang.reflect.InvocationTargetException:
- com.google.apphosting.utils.jetty.JettyLogger warn
Nested in javax.servlet.ServletException: com.googlecode.jsonplugin.JSONException: com.googlecode.jsonplugin.JSONException: com.googlecode.jsonplugin.JSONException: com.googlecode.jsonplugin.JSONException: com.googlecode.jsonplugin.JSONException: com.googlecode.jsonplugin.JSONException: java.lang.reflect.InvocationTargetException: com.google.apphosting.utils.jetty.JettyLogger warn
这里下面有4-5页的异常信息,就不贴出来了
解决方法:
出现这个问题是某属性通过串行化json数据异常,
因为使用的spring注入属性recordService,也就是提供了getter和setter,
而sturts-plugin是通过getterXxx把Xxx属性串行化输出JSON到客户端,
所以解决这个异常方法就是在不需要串行化的属性的getter前加上annotation,
就是@JSON(Serialize=false)
代码如:
@JSON(serialize=false) public RecordService getRecordService() { return recordService; }
相关推荐
`struts2-json-plugin-2.1.8.1.jar` 则是Struts 2框架的一个插件,主要用于增强Struts 2对JSON的支持。Struts 2是一款非常流行的MVC(Model-View-Controller)框架,用于构建企业级的Java Web应用程序。这个插件允许...
在实际开发中,为了使用这个插件,你需要将`struts2-json-plugin-2.3.8.jar`文件放入项目的类路径(classpath)下,然后在Struts2的配置文件(通常为struts.xml)中启用JSON插件。在Action类中,定义返回JSON数据的...
这个压缩包包含了两个关键的组件:json-lib-2.1.jar和struts2-json-plugin-2.1.8.1.jar,它们是Struts2支持JSON(JavaScript Object Notation)序列化和反序列化的关键。 1. **json-lib-2.1.jar**: JSON是一种轻...
ajax结合Struts2要用到的jar包
首先,我们来看`struts-json-plugin-2.1.8.jar`,这是Struts2的JSON插件,它允许Struts2的动作类直接返回JSON格式的数据,方便前端进行Ajax请求处理。该插件在2.1.8版本中修复了若干bug,并提供了对JSON输出的支持。...
标题"struts2-json-plugin-2.1.8.1.jar"表明这是Struts2 JSON插件的一个特定版本,2.1.8.1。在软件开发中,版本号的更新通常意味着修复了已知的错误,增加了新的特性,或者提高了性能。 "JsonPlugin.tld"是Tag ...
使用Struts2 JSON Plugin,开发者可以设置Action的返回类型为"json",这样在Action执行完毕后,Struts2会自动将Action的模型驱动数据转化为JSON格式并发送到客户端。这大大简化了服务器端与客户端之间通过HTTP传递...
Struts2-Json-Plugin 是一个专门为 Struts2 框架设计的插件,它使得在Struts2中处理Ajax请求并返回JSON数据变得更加简便。这个插件提供了"json"结果类型,允许Action直接被序列化为JSON格式,极大地简化了开发过程。...
这是我目前发现的最高版本2012年08月06日
Struts2-Json-Plugin 是一个专门为 Struts2 框架设计的插件,它使得在Struts2中能够方便地处理JSON数据,从而更好地支持Ajax请求。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于前端与后端...
1. **添加依赖**:首先,需要将`struts2-json-plugin-2.1.8.jar`文件添加到项目的类路径中,如果是Maven项目,需要在pom.xml中配置对应的依赖。 2. **配置Struts2核心过滤器**:在web.xml中配置Struts2的核心过滤器...
`struts2-json-plugin-2.2.1`这个版本的插件,意味着它是Struts2框架的2.2.1版本中的JSON支持。以下是这个插件正常工作所需的一些核心JAR文件: 1. **struts2-core.jar**:这是Struts2框架的基础,包含了所有核心的...
在Struts中,可以使用Struts2的JSON插件(Struts2-Json-plugin)来支持JSON的序列化和反序列化,使得服务器端的Java对象可以直接转换为JSON格式,发送到客户端,然后由JavaScript解析并操作。 在Struts-AJAX-JSON-...
总结来说,"struts-2.5.20-all"压缩包提供了完整的Struts 2框架,包括Action、Interceptor、ValueStack等核心组件,而`struts2-json-plugin.jar`则增强了Struts 2对JSON数据的支持,使得开发基于JSON的Web应用更加...
【标题】"Struts2(json-plugin) + Spring2 + ExtJS2.2 开源网络硬盘系统"是一个基于Java技术栈的开源项目,它利用了Struts2框架的json-plugin插件,Spring2作为服务层管理和依赖注入框架,以及ExtJS2.2作为前端展示...
struts2-core-2.xx 升级为struts2-core-2.3.15.1.jar后 jsonplugin-0.32.jar需要升级为 struts2-core-2.3.15.1.jar,不然在使用ajax时候报错 java.lang.NullPointerException at org.apache.jsp.web.error_jsp._jsp...
3. `struts2-json-plugin-2.1.8.1.jar`:这是另一个版本的Struts2 JSON插件,版本号为2.1.8.1。与`jsonplugin-0.34.jar`类似,它提供了对JSON的支持,但可能包含了更多的特性、改进或修复了某些已知问题。不同版本的...
3. **struts2-json-plugin**: 提供了对JSON格式数据的支持,使得Action可以直接返回JSON响应,便于AJAX和API开发。 4. **struts2-dojo-plugin**: 提供了与Dojo JavaScript库的集成,方便创建富客户端界面。 5. **...
在实际开发中,为了测试Struts2返回JSON格式的数据,可以创建一个简单的Action,设置返回值,并在前端使用AJAX请求来接收这个JSON数据。例如,使用jQuery的$.ajax()方法进行请求,然后通过JSON.parse()解析返回的...