如何简单地从 JSP 返回 JSON
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/9124960/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to simply return JSON from a JSP
提问by Superdooperhero
Can anyone give me an example of how to return the following json simply from a jsp without any external libraries (except the ones that come standard with Oracle Java)?
谁能给我一个例子,说明如何在没有任何外部库的情况下(除了 Oracle Java 的标准库)简单地从 jsp 返回以下 json?
[
{"label":"item 1", "value":"item 1", "id": 1},
{"label":"item 2", "value":"item 2", "id": 2},
{"label":"item 3", "value":"item 1", "id": 3}
];
I tried
我试过
<%-- Set the content type header with the JSP directive --%>
<%@ page contentType="application/json" %>
<%-- Set the content disposition header --%>
<%
// Returns all employees (active and terminated) as json.
response.setContentType("application/json");
response.setHeader("Content-Disposition", "inline");
%>
<%@ page language="java"%>
<%@ page import="java.sql.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%@ page import="javax.servlet.http.*"%>
<%@ page import="oracle.apps.fnd.common.WebAppsContext"%>
<%@ page import="oracle.apps.fnd.common.WebRequestUtil"%>
<%@ page import="oracle.apps.fnd.common.ResourceStore"%>
<%@ page import="oracle.apps.fnd.common.VersionInfo"%>
[
{"label":"item 1", "value":"item 1", "id": 1},
{"label":"item 2", "value":"item 2", "id": 2},
{"label":"item 3", "value":"item 1", "id": 3}
];
but it does not seem to work, since my jquery autocomplete does not work with it.
但它似乎不起作用,因为我的 jquery 自动完成功能不起作用。
Here's part of the autocomplete code:
这是自动完成代码的一部分:
<html>
<head>
$(function() {
var cust_ac = $("#autocomplete input#cust_input").autocomplete({
source: "xxpay_json_emp.jsp",
change: function (event, ui) { alert(ui.item.id); },
width: 500,
max: 3000,
selectFirst: false,
delay: 250,
minChars: 3,
matchContains: 1,
scroll: false,
scrollHeight: 200,
maxItemsToShow: 20
});
$('#autocomplete').submit(function() {
return false; // Cancel submit button on form.
});
});
function handleKeyPress(e, form)
{
var key = e.keyCode || e.which;
if (key == 13)
{
e.cancelBubble = true;
e.returnValue = false;
}
}
</script>
</head>
<body class='fdlbod'>
<div style='padding-left : 20px'>
<textarea id="holdtext" style="display:none;"></textarea>
<form id="autocomplete" name="autocomplete">
<%
out.println("Customer Name: ");
out.println("<input type='text' value='' name='cust_input' id='cust_input' size='80' onkeypress='handleKeyPress(event,this.form)' />");
%>
</form>
</div>
</body>
</html>
采纳答案by Alessandro Santini
Did you try to invoke the page yourself from a web browser? Is the output what you expected? Also, use Firebug or Chrome Debugger to inspect the response headers/payload and verify that everything is correct.
您是否尝试过自己从 Web 浏览器调用该页面?输出是否符合您的预期?此外,使用 Firebug 或 Chrome Debugger 检查响应标头/有效负载并验证一切是否正确。
UpdateI think I nailed it - take that damned semi-colon away.
更新我想我已经搞定了——把那个该死的分号拿走。
回答by Alessandro Santini
This is the code:
这是代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js"></script>
</head>
<body>
<h1>Hello World!</h1>
<label for="autocomplete">Enter some text here</label>
<input id="autocomplete" name="autocomplete" />
<script type="text/javascript">
$(document).ready(function() {
$("#autocomplete").autocomplete({
source: 'json.jsp',
minLength: 2
});
});
</script>
</body>
</html>
and this is the JSON:
这是 JSON:
[
{"label":"item 1", "value":"item 1", "id": 1},
{"label":"item 2", "value":"item 2", "id": 2},
{"label":"item 3", "value":"item 1", "id": 3}
]
<%
// Returns all employees (active and terminated) as json.
response.setContentType("application/json");
%>
回答by Amarjit Datta
From a JSP file, simplest way to create JSON output is using "json-taglib" library.
从 JSP 文件中,创建 JSON 输出的最简单方法是使用“json-taglib”库。
http://json-taglib.sourceforge.net/
http://json-taglib.sourceforge.net/
All you'll have to do is:
您所要做的就是:
1) Include the library jar file. You can either include it by downloading the jar file directly or by adding the pom dependency. Maven repo of this taglib can be found here; http://maven.nuxeo.org/nexus/content/repositories/public/atg/taglib/json/json-taglib/0.4.1/
1) 包含库 jar 文件。您可以通过直接下载 jar 文件或添加 pom 依赖项来包含它。可以在此处找到此 taglib 的 Maven 存储库; http://maven.nuxeo.org/nexus/content/repositories/public/atg/taglib/json/json-taglib/0.4.1/
2) Add following line in the taglib definition
2) 在 taglib 定义中添加以下行
3)Make sure the page output content type is json
3)确保页面输出内容类型为json
4) Then just use the taglib
4)然后只需使用taglib
Here is a sample code
这是一个示例代码
<%@page language="java" contentType="application/json;charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="json" uri="http://www.atg.com/taglibs/json" %>
<json:object>
<json:property name="section" value="${section.name}"/>
<json:property name="itemCount" value="${fn:length(items)}"/>
<json:array name="items" var="cArticle" items="${items}">
<article:use name="cArticle">
<json:object>
<wf-custom-tags:encodeString
inputString="${article.fields.title.value}"
var="encodedTitle"/>
<json:property name="title" value="${encodedTitle}"/>
<c:remove var="encodedTitle" scope="page"/>
</json:object>
</article:use>
</json:array>
</json:object>
<c:remove var="items" scope="page"/>

