Struts2 + Json + Jstl 节选自 《Netkiller Java 手札》

6.5. Json 内容展示

Struts 配置文件

<package name="information" extends="main" namespace="/inf">
		<action name="Information" class="com.example.action.Infomation">
			<result type="tiles">information</result>
		</action>
	</package>

Action 文件

package cn.netkiller.action;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.Charset;

import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonReader;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

public class Infomation extends ActionSupport{
	/**
	 *
	 */
	private static final long serialVersionUID = 1L;

	private JsonObject jsonObject = null;
	private String jsonString = "";

	@Override
	public String execute() throws IOException {

		String URL = "http://www.example.com/list/json/93/20/0.html";
		System.out.printf("%s Requeted URL is %s", this.getClass().getName(), URL);

		StringBuilder sb = new StringBuilder();
		URLConnection urlConn = null;
		InputStreamReader in = null;
		try {
			URL url = new URL(URL);
			urlConn = url.openConnection();
			if (urlConn != null)
				urlConn.setReadTimeout(60 * 1000);
			if (urlConn != null && urlConn.getInputStream() != null) {
				in = new InputStreamReader(urlConn.getInputStream(), Charset.defaultCharset());
				BufferedReader bufferedReader = new BufferedReader(in);
				if (bufferedReader != null) {
					int cp;
					while ((cp = bufferedReader.read()) != -1) {
						sb.append((char) cp);
					}
					bufferedReader.close();
				}
			}
			in.close();

			jsonString = sb.toString();

			System.out.println(jsonString);

			JsonReader reader = Json.createReader(new StringReader(jsonString));

			JsonObject jsonObject = reader.readObject();
			this.setJsonObject(jsonObject);

			reader.close();

			// System.out.println(jsonObject.size());

			/*for (int i = 0; i < jsonObject.size() - 2; i++) {
				JsonObject rowObject = jsonObject.getJsonObject(Integer.toString(i));
				// System.out.println(rowObject.toString());
				System.out.printf("%s\t%s\t%s\n", rowObject.getJsonString("id"), rowObject.getJsonString("title"),
						rowObject.getJsonString("ctime"));
			}*/

		} catch (Exception e) {
			throw new RuntimeException("Exception while calling URL:" + URL, e);
		}

		return Action.SUCCESS;
	}

	public JsonObject getJsonObject() {
		return jsonObject;
	}

	public void setJsonObject(JsonObject jsonObject) {
		this.jsonObject = jsonObject;
	}

	public String getJsonString() {
		return jsonString;
	}

	public void setJsonString(String jsonString) {
		this.jsonString = jsonString;
	}
}

JSP 文件

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<table>
	<c:forEach items="${jsonObject.entrySet()}" var="json"
		varStatus="status">
		<c:if test="${not status.last}">
			<tr>
				<td>${json.key+1}</td>
				<td>${json.value.getJsonString("id")}</td>
				<td>${json.value.getJsonString("title")}</td>
				<td>${json.value.getJsonString("ctime")}</td>
			</tr>
		</c:if>
	</c:forEach>
</table>
===================

<c:forEach items="${jsonObject.entrySet()}" var="json">
      ${json.value.toString()}
</c:forEach>

===========

<s:property value="jsonString" />

解决双引号问题

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

<table>
	<c:forEach items="${jsonObject.entrySet()}" var="json"
		varStatus="status">
		<c:if test="${not status.last}">

			<c:set var="id"
				value="${fn:replace(json.value.getJsonString('id'),'\"', '')}" />
			<c:set var="title" value="${fn:replace(json.value.getJsonString('title'),'\"', '')}" />
			<c:set var="ctime"
				value="${fn:replace(json.value.getJsonString('ctime'),'\"', '')}" />
			<tr>
				<td><c:out value="${status.count}" /></td>
				<td><a href="/inf/Detail.do?id=<c:out value="${id}"/>"><c:out
							value="${title}" /></a></td>
				<td><c:out value="${ctime}" /></td>
			</tr>
		</c:if>
	</c:forEach>
</table>

<c:set var="pages" value="${jsonObject.getJsonObject('pages')}" />

<a href="${pages.first}">首页</a>
<a href="${pages.before}">上一页</a>
<a href="${pages.next}">下一页</a>
<a href="${pages.last}">尾页</a>

<span>Count: ${pages.count}, Total: ${pages.total}</span>
时间: 2024-10-30 09:14:53

Struts2 + Json + Jstl 节选自 《Netkiller Java 手札》的相关文章

Netkiller Java 手札之前言

1.2. 作者简介 陈景峯 (ㄔㄣ ㄐ丨ㄥ ㄈㄥ) Nickname:netkiller | English name: Neo chen | Nippon name: ちんけいほう (音訳) | Korean name: 천징봉 | Thailand name: ภูมิภาพภูเขา | Vietnam: Trần Cảnh Phong Callsign: BG7NYT | QTH: ZONE CQ24 ITU44 ShenZhen, China 程序猿,攻城狮,挨踢民工, Full St

急struts2 json 问题

问题描述 我 在 Struts2 中 需返回一个json形式的List productTypes 请问在 xml 如何 配置 不要param="root"用 param="includeProperties"返回 问题补充:飞雪无情 写道 解决方案 晕,我刚想到这样你就想到了,我已提交答案就看到你的信息了..咱俩想的一样啦解决方案二:productTypes[d+].typeName 试试..我感觉productTypes[d+]已经把所有的productTypes

Netkiller Management 手札之前言

1.1. 系列文档 下面是我多年积累下来的经验总结,整理成文档供大家参考: Netkiller Architect 手札 Netkiller Developer 手札 Netkiller PHP 手札 Netkiller Python 手札 Netkiller Testing 手札 Netkiller Cryptography 手札 Netkiller Linux 手札 Netkiller FreeBSD 手札 Netkiller Shell 手札 Netkiller Security 手札 N

Netkiller Linux 手札之前言

1.1. 本文目的 为什么写这篇文章 有很多想法,不能实现.工作中也用不到,所以想写出来,和大家分享.有一点写一点,写得也不好,就当学习笔记了. 这篇文档是作者8年来对工作的总结,是作者一点一滴的积累起来的,有些笔记已经丢失,所以并不完整. 因为工作太忙整理比较缓慢. 目前的工作涉及面比较窄所以新文档比较少. 我现在花在技术上的时间越来越少,兴趣转向摄影.也想写写摄影方面的心得体会. 我想到哪写到哪,你会发现文章没一个中心,今天这里写点,明天跳过本章写其它的. 文中例子绝对多,对喜欢复制然后粘贴

Netkiller FreeBSD 手札之前言

1.2. 作者简介 陈景峯 (ㄔㄣ ㄐ丨ㄥ ㄈㄥ) Nickname:netkiller | English name: Neo chen | Nippon name: ちんけいほう (音訳) | Korean name: 천징봉 | Thailand name: ภูมิภาพภูเขา | Vietnam: Trần Cảnh Phong Callsign: BG7NYT | QTH: ZONE CQ24 ITU44 ShenZhen, China 程序猿,攻城狮,挨踢民工, Full St

Netkiller Developer 手札之前言

1.2. 作者简介 陈景峯 (ㄔㄣ ㄐ丨ㄥ ㄈㄥ) Nickname:netkiller | English name: Neo chen | Nippon name: ちんけいほう (音訳) | Korean name: 천징봉 | Thailand name: ภูมิภาพภูเขา | Vietnam: Trần Cảnh Phong Callsign: BG7NYT | QTH: ZONE CQ24 ITU44 ShenZhen, China 程序猿,攻城狮,挨踢民工, Full St

Netkiller PHP 手札之前言

1.2. 作者简介 陈景峯 (ㄔㄣ ㄐ丨ㄥ ㄈㄥ) Nickname:netkiller | English name: Neo chen | Nippon name: ちんけいほう (音訳) | Korean name: 천징봉 | Thailand name: ภูมิภาพภูเขา | Vietnam: Trần Cảnh Phong Callsign: BG7NYT | QTH: ZONE CQ24 ITU44 ShenZhen, China 程序猿,攻城狮,挨踢民工, Full St

这段代码输出保存在数据库中的json格式数据怎么用java代码在前端显示出来

问题描述 这段代码输出保存在数据库中的json格式数据怎么用java代码在前端显示出来 public class SaveHotKeySkillReq extends CommandBase { @Resource //数据库操作 private EntityManager em; protected void execute() throws GMessageException { CRequesthotKeyChange msg = pak.readMsg(CRequesthotKeyCha

Netkiller 技术手札 YUM 源

Netkiller 技术手札的 YUM 源 http://netkiller.sourceforge.net/pub/repo/ 你可以使用yum install netkiller-centos 安装电子书 安装至:/usr/share/doc/netkiller/ 下面     cat > /etc/yum.repos.d/netkiller.repo <<EOF [netkiller] name=Netkiller Free Books baseurl=http://netkill