我有一个问题让json使用struts-jquery-plugin-2.1.0
我也在我的类路径中包含了struts2-json-plugin-2.1.8.1。 我确定我的struts-jquery-plugin配置正确,因为网格加载了,但是没有加载它应该从json'ized的动作类中得到的数据。
使用json插件和struts-jquery插件的文档留下了很多我甚至无法通过示例/教程找到的空白,所以我来到stackoverflow社区。 p>
我的action类有一个名为gridModel的属性,它使用一个名为Customer的基本POJO列表。客户是一个有一个属性的pojo,id。 我有一个工厂,将填充的List提供给我提到的动作List属性,名为gridModel。
以下是我如何设置我的struts.xml文件:
<constant name="struts.devMode" value="true"/>
<constant name="struts.objectFactory" value="guice"/>
<package name="org.webhop.ywdc" namespace="/" extends="struts-default,json-default">
<result-types>
<result-type name="json" class="com.googlecode.jsonplugin.JSONResult">
</result-type>
</result-types>
<action name="login" class="org.webhop.ywdc.LoginAction" >
<result type="json"></result>
<result name="success" type="dispatcher">/pages/uiTags/Success.jsp</result>
<result name="error" type="redirect">/pages/uiTags/Login.jsp</result>
<interceptor-ref name="cookie">
<param name="cookiesName">JSESSIONID</param>
</interceptor-ref>
</action>
<action name="logout" class="org.webhop.ywdc.LogoutAction" >
<result name="success" type="redirect">/pages/uiTags/Login.jsp</result>
</action>
</package>
在struts.xml文件中我设置了 在我列出的行动中 在动作配置中。
这是动作加载的jsp页面:
欢迎您,您已登录! 欢迎您,您已登录。 <h2>Password:<s:property value="password"/></h2>
<h2>userId:<s:property value="userId"/></h2>
<br />
<a href="<%= request.getContextPath() %>/logout.action">Logout</a><br /><br />
ID: <s:property value="id"/>
session id: <s:property value="JSESSIONID"/>
</body>
我不确定如何判断json插件从动作类创建的json。 如果我知道我怎么知道它是不是形成得当。 据我所知,如果我在我的动作配置中具体说明 在struts.xml中,设置为读取json并知道要查找“gridModel”的网格将自动将json加载到网格中,但不是。
继承我的行动课:
公共类LoginAction扩展了ActionSupport {
public String JSESSIONID;
public int id;
private String userId;
private String password;
public Members member;
public List<Customer> gridModel;
public String execute()
{
Cookie cookie = new Cookie("ywdcsid", password);
cookie.setMaxAge(3600);
HttpServletResponse response = ServletActionContext.getResponse();
response.addCookie(cookie);
HttpServletRequest request = ServletActionContext.getRequest();
Cookie[] ckey = request.getCookies();
for(Cookie c: ckey)
{
System.out.println(c.getName() + "/cookie_name + " + c.getValue() + "/cookie_value");
}
Map requestParameters = ActionContext.getContext().getParameters();//getParameters();
String[] testString = (String[])requestParameters.get("password");
String passwordString = testString[0];
String[] usernameArray = (String[])requestParameters.get("userId");
String usernameString = usernameArray[0];
Injector injector = Guice.createInjector(new GuiceModule());
HibernateConnection connection = injector.getInstance(HibernateConnection.class);
AuthenticationServices currentService = injector.getInstance(AuthenticationServices.class);
currentService.setConnection(connection);
currentService.setInjector(injector);
member = currentService.getMemberByUsernamePassword(usernameString, passwordString);
userId = member.getUsername();
password = member.getPassword();
CustomerFactory customerFactory = new CustomerFactory();
gridModel = customerFactory.getCustomers();
if(member == null)
{
return ERROR;
}
else
{
id = member.getId();
Map session = ActionContext.getContext().getSession();
session.put(usernameString, member);
return SUCCESS;
}
}
public String logout() throws Exception
{
Map session = ActionContext.getContext().getSession();
session.remove("logged-in");
return SUCCESS;
}
public List<Customer> getGridModel()
{
return gridModel;
}
public void setGridModel(List<Customer> gridModel)
{
this.gridModel = gridModel;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
public String getUserId()
{
return userId;
}
public void setUserId(String userId)
{
this.userId = userId;
}
public String getJSESSIONID() {
return JSESSIONID;
}
public void setJSESSIONID(String jsessionid) {
JSESSIONID = jsessionid;
}
}
请帮我解决这个问题。你将完成我的一周,因为这是一个专业 我的瓶颈:(
非常感谢,
thebravedave
答案 0 :(得分:0)
事实证明我没有正确设置我的struts.xml配置文件。 我在我用于返回非json数据的同一个动作类中放了一个json返回。 不要这样做。创建另一个专门只返回json数据的动作类 继承人我的struts.xml [码]
<package name="org.webhop.ywdc" namespace="/" extends="struts-default">
<action name="login" class="org.webhop.ywdc.LoginAction">
<interceptor-ref name="params"/>
<interceptor-ref name="cookie">
<param name="userId" />
</interceptor-ref>
<result name="success" type="dispatcher">/pages/Success.jsp</result>
<result name="error" type="dispatcher">/pages/Login.jsp</result>
</action>
<action name="logout" class="org.webhop.ywdc.LogoutAction" >
<result name="success" type="dispatcher">/pages/Login.jsp</result>
</action>
<action name="editcellentry" class="org.webhop.ywdc.EditCellEntryAction">
<result name="success" type="dispatcher">/pages/Success.jsp</result>
</action>
</package>
<package name="example" namespace="/" extends="json-default">
<result-types>
<result-type name="json" class="com.googlecode.jsonplugin.JSONResult"/>
</result-types>
<action name="jsonaction" class="example.JsonAction">
<result type="json" />
</action>
</package>
[/码] 您会注意到我甚至将它放在一个专门扩展json-default的新包中。 我还遇到了这样的问题,我最初将我的json root设置为List集合,我将其设置为我的集合,将其序列化为json数据。 如果你不这样做,它将为每个集合序列化getter for setters。 如果将集合设置为json的根,则它不会返回带有json数据的集合的名称,您需要在jsp页面中网格配置的gridModel参数中设置网格所在的参数。 使用firebug返回你的json,并确保返回的json的名称与你在gridModel中定义的值匹配。