如何将struts 2操作类的JSON响应传递给HTML页面

时间:2015-08-19 08:02:06

标签: java jquery struts2 struts2-json-plugin

我正在研究带有JSON响应的struts 2 以下是我的代码

行动类

public class JSONDataAction implements ServletRequestAware{

    private String firstName;
    private String lastName;

    protected HttpServletRequest request;

    public String execute() {

        System.out.println("FIRST NAME IN ACTION CLASS IS::"+firstName);
        System.out.println("LAST NAME IN ACTION CLASS IS::"+lastName);      

        request.setAttribute("temp", "temp data");  

        return "success";
   }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }

    public HttpServletRequest getServletRequest() {
        return request;
    }
}

struts.xml中

<?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.devMode" value="true" />

    <package name="jsonView" namespace="/" extends="struts-default,json-default">

       <action name="getJSONResult" class="com.javatechig.struts2web.actions.JSONDataAction">
           <result name="success" type="json">/pages/details.html</result>
       </action>

   </package>
</struts>

employee.html

<html>
    <body>
        <h4>
            Struts 2 HTML5 Example
        </h4>

        <form action="getJSONResult" method="post">
            Enter first name: <input type = "text" name="firstName"><br>
            Enter last name : <input type = "text" name="lastName"><br> 
            <input type="submit">
        </form>
    </body>
</html>

details.html

 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Details</title>
</head>
<body>
      EMPLOYEE DETAILS :::  
</body>
</html>  

我已根据需要将struts2-json-plugin-2.3.24.jar添加到lib文件夹中

当我提交表单(employee.html)时,表单数据在动作类(JSONDataAction)中捕获 我在浏览器中看到了json响应,如下所示

{lastName&#34;:&#34;用户&#34;,firstName:&#34;测试&#34;}
我有以下疑惑

  1. 为什么details.html没有显示在浏览器上(我只看到json 浏览器上的响应。)
  2. 请求属性 - json响应中不存在temp。如何 在json响应中传递请求属性。
  3. 如何在details.html中处理json响应。
  4. 如何将JSON响应传递给基于的不同视图(HTML5) 从动作类返回的结果类型。

1 个答案:

答案 0 :(得分:0)

首先,我建议您阅读the official JSON plugin documentationthis教程

  

为什么details.html没有显示在浏览器上(我在浏览器上只看到json响应)。

因为你返回<result name="success" type="json">所以Struts2只返回你决定以JSON格式返回的参数。

  

请求属性 - json响应中不存在temp。如何在json响应中传递request属性。

正如我之前所写,JSON响应是由具有getter和setter的action类的所有变量组成的

  

如何在details.html中处理json响应。

如果您需要将一些数据处理到html页面,则必须使用Struts2标记。例如<s:property value="lastName" /><s:property value="firstName" />。对于这种行为,JSON根本不需要。如果您想通过Ajax调用提交表单,那么JSON响应可能很有用,但在这种情况下,您只需要<result name="success">/pages/details.html</result>

我还建议您使用JSP而不是HTML页面。所以结果页面将是:

<强> details.jsp

 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Details</title>
</head>
<body>
    <s:property value="lastName" />
    <s:property value="firstName" />
</body>
</html>