任何人都可以给我一个例子,说明如何在没有任何外部库的情况下从jsp返回以下json(除了Oracle Java标准的那些)?
[
{"label":"item 1", "value":"item 1", "id": 1},
{"label":"item 2", "value":"item 2", "id": 2},
{"label":"item 3", "value":"item 1", "id": 3}
];
我试过
<%-- 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}
];
但它似乎不起作用,因为我的jquery自动完成功能无法使用它。
以下是自动填充代码的一部分:
<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>
答案 0 :(得分:8)
您是否尝试过自行从网络浏览器调用该页面?输出是你所期望的吗?此外,使用Firebug或Chrome调试器检查响应标头/有效负载并验证一切正确。
更新我想我已经钉了它 - 把那个该死的分号拿去。
答案 1 :(得分:6)
这是代码:
<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>
这是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");
%>
答案 2 :(得分:3)
从JSP文件中,创建JSON输出的最简单方法是使用“json-taglib”库。
http://json-taglib.sourceforge.net/
你所要做的就是:
1)包含库jar文件。您可以通过直接下载jar文件或添加pom依赖项来包含它。 这个taglib的Maven repo可以在这里找到; http://maven.nuxeo.org/nexus/content/repositories/public/atg/taglib/json/json-taglib/0.4.1/
2)在taglib定义中添加以下行
3)确保页面输出内容类型为json
4)然后只需使用taglib
以下是示例代码
<%@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"/>