Как передать ответ JSON от класса действия struts 2 на страницу HTML
Я работаю над стойками 2 с ответом JSON
Ниже мой код
КЛАСС ДЕЙСТВИЙ
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":"User", firstName: "Test"}
У меня есть следующие сомнения
- Почему details.html не отображается в браузере (я вижу только ответ json в браузере).
- Атрибут запроса - temp не присутствует в ответе json. Как передать атрибут запроса в ответе json.
- Как обработать ответ json в details.html.
- Как передать ответ JSON различным представлениям (HTML5) в зависимости от типа результата, возвращаемого из класса действий.
1 ответ
Прежде всего, я предлагаю вам прочитать официальную документацию по плагину JSON и это руководство
Почему details.html не отображается в браузере (я вижу только ответ json в браузере).
Потому что вы вернетесь <result name="success" type="json">
поэтому Struts2 вернет только те параметры, которые вы решили вернуть в формате JSON.
Атрибут запроса - temp не присутствует в ответе json. Как передать атрибут запроса в ответе json.
Ответ JSON, как я писал ранее, состоит из всех переменных вашего класса действий, которые имеют методы получения и установки
Как обработать ответ json в details.html.
Если вам нужно обработать некоторые данные на 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>