Struts2 +JSON 如何数据传递

zhao9302 2010-01-30 11:29:16
我用的是 MyEclipse 8.0直接导入的struts包, 包中已经自己集成了 Json-lib

出现了巨多的问题

实体类

package com.zhaohui.entity;

public class Person
{
private int id;
private String name;
private String title;

//set get方法省略
}

Action类:

package com.zhaohui.action;

import net.sf.json.JSONObject;

import com.opensymphony.xwork2.ActionSupport;
import com.zhaohui.entity.Person;

public class PersonAction extends ActionSupport
{
private String stringJson = null;

public String getStringJson()
{
return stringJson;
}

public void setStringJson(String stringJson)
{
this.stringJson = stringJson;
}

public String execute()
{
Person person = new Person();

person.setId(1);
person.setName("Eric");
person.setTitle("教授");

JSONObject JsonObject = JSONObject.fromObject(person);
stringJson = JsonObject.toString();

return SUCCESS;
}
}




struts.xml配置文件

<package name="test" extends="struts-default">
<action name="person" class="com.zhaohui.entity.Person">
<result>/index.jsp</result>
</action>
</package>



JSP页面就一句话 <s:property value="stringJson"/>


结果报错:
服务器上报错:
严重: Servlet.service() for servlet jsp threw exception
The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed for this tag. - [unknown location]
at org.apache.struts2.views.jsp.TagUtils.getStack(TagUtils.java:60)
at org.apache.struts2.views.jsp.StrutsBodyTagSupport.getStack(StrutsBodyTagSupport.java:44)
at org.apache.struts2.views.jsp.ComponentTagSupport.doStartTag(ComponentTagSupport.java:48)
at org.apache.jsp.index_jsp._jspx_meth_s_005fproperty_005f0(index_jsp.java:118)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:88)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)

页面上报错500:
exception:
java.lang.reflect.InvocationTargetException
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
root:
java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher
com.zhaohui.action.PersonAction.execute(PersonAction.java:31)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)


第31行是这个:stringJson = JsonObject.toString();

为什么会报错,怎么去解决 这两个问题
我还想知道 在Extjs上我怎么去接收数据呢 ?


...全文
487 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
softroad 2010-12-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ibm_hoojo 的回复:]
HTML code

java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher
少了个jar包,ezmorph.jar。
好像需要这几个包
json-lib-2.3-jdk13.jar,ezmorph-1.0.3.jar,commons-lang.jar,commons-logging.jar,commons-beanutils.jar……
[/Quote]

这样做,会出异常的throw new IllegalStateException
(sm.getString("coyoteRequest.sessionCreateCommitted"));
bearsu_zhou 2010-04-09
  • 打赏
  • 举报
回复
HTML code
public String execute()
{
Person person = new Person();

person.setId(1);
person.setName("Eric");
person.setTitle("教授");

JSONObject JsonObject = JSONObject.fromObject(person);
stringJson = JsonObject.toString();
PrintWrite out = ServletActionContext.getResponse().getWrite();
out.print(stringJson);
out.flush();
out.close();
return SUCCESS; //这里可以返回null
}
如果你是通过url加载数据就可以这样用了,比如:tree、grid都可以这样用。
如果是其他请求,你可以在js客户端获得到这段字符串responseText,
然后通过eval()将json字符串转换成js对象进行操作。
Person person = new Person();
person转换成js对象后,可以这样访问属性
person.id 或 person["id"] 都可以。
-----这样写实可以,简直是误人子弟
zhangliang1819 2010-04-05
  • 打赏
  • 举报
回复
学习了
zhao9302 2010-01-31
  • 打赏
  • 举报
回复
哪位大侠帮忙一下 小弟谢过了~
hoojo 2010-01-31
  • 打赏
  • 举报
回复

public String execute()
{
Person person = new Person();

person.setId(1);
person.setName("Eric");
person.setTitle("教授");

JSONObject JsonObject = JSONObject.fromObject(person);
stringJson = JsonObject.toString();
PrintWrite out = ServletActionContext.getResponse().getWrite();
out.print(stringJson);
out.flush();
out.close();
return SUCCESS; //这里可以返回null
}
如果你是通过url加载数据就可以这样用了,比如:tree、grid都可以这样用。
如果是其他请求,你可以在js客户端获得到这段字符串responseText,
然后通过eval()将json字符串转换成js对象进行操作。
Person person = new Person();
person转换成js对象后,可以这样访问属性
person.id 或 person["id"] 都可以。
hoojo 2010-01-31
  • 打赏
  • 举报
回复

java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher
少了个jar包,ezmorph.jar。
好像需要这几个包
json-lib-2.3-jdk13.jar,ezmorph-1.0.3.jar,commons-lang.jar,commons-logging.jar,commons-beanutils.jar,xom-1.1.jar,commons-collections-3.2.jar
你看看是不是
zhao9302 2010-01-31
  • 打赏
  • 举报
回复
自己顶起 哪位大侠help一下
sectue 2010-01-31
  • 打赏
  • 举报
回复
我是进来学习的。

52,787

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧