Как просто вернуть JSON из JSP
Может ли кто-нибудь дать мне пример того, как вернуть следующий json просто из jsp без каких-либо внешних библиотек (кроме тех, которые входят в стандартную комплектацию с 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>
Ответы
Ответ 1
Вы пытались вызвать страницу самостоятельно из веб-браузера? Является ли вывод тем, что вы ожидали? Кроме того, используйте Firebug или отладчик Chrome для проверки заголовков ответов/полезной нагрузки и убедитесь, что все правильно.
Обновление Я думаю, что я прибил его - отбросьте эту проклятую полуколону.
Ответ 2
Это код:
<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");
%>
Ответ 3
Из JSP файла простейшим способом создания вывода JSON является использование библиотеки json-taglib.
http://json-taglib.sourceforge.net/
Все, что вам нужно сделать, это:
1) Включите файл библиотеки jar. Вы можете включить его, загрузив файл jar напрямую или добавив зависимость pom.
Maven repo этого taglib можно найти здесь;
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"/>