2012-02-03 32 views
12

¿Alguien me puede dar un ejemplo de cómo devolver el siguiente json simplemente desde un jsp sin ninguna biblioteca externa (excepto las que vienen de manera estándar con Oracle Java)?Cómo devolver JSON desde un JSP

[ 
    {"label":"item 1", "value":"item 1", "id": 1}, 
    {"label":"item 2", "value":"item 2", "id": 2}, 
    {"label":"item 3", "value":"item 1", "id": 3} 
]; 

me trataron

<%-- 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} 
]; 

pero no parece funcionar, ya que mi jQuery autocompletado no funciona con ella.

Aquí es parte del código de autocompletar:

<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:&nbsp;"); 
     out.println("<input type='text' value='' name='cust_input' id='cust_input' size='80' onkeypress='handleKeyPress(event,this.form)' />"); 
%> 
     </form> 
    </div> 
</body> 
</html> 
+1

¿Y qué sale? La condición "JQuery no funciona" puede tener muchas causas. –

+0

¿Por qué no hay bibliotecas externas? Una biblioteca JSON es muy fácil de usar y la única forma real de hacerlo. 'oracle.apps.fnd' tampoco viene con Java, por cierto. – Thilo

+0

No soy lo suficientemente inteligente como para descubrir cómo agregar bibliotecas externas a la instalación de Oracle java. – Superdooperhero

Respuesta

8

¿trató de invocar manualmente la página desde un navegador web? ¿El resultado es lo que esperabas? Además, use Firebug o Chrome Debugger para inspeccionar los encabezados de respuesta/carga útil y verificar que todo sea correcto.

Actualización Creo que lo clavé, quítate ese maldito punto y coma.

+0

Ni siquiera parece llamar a mi json (no veo nada en Firebug). Aquí está mi código: – Superdooperhero

+0

$ (función() { var cust_ac = $ ("# autocompletar entrada # cust_input"). Autocompletar ({ fuente: "xxpay_json_emp.jsp", cambio: función (evento, ui) {alerta (ui.item.carné de identidad); }, anchura: 500, max: 3000, selectFirst: false, retraso: 250, minChars: 3, matchContains: 1, de desplazamiento: false, scrollHeight: 200, maxItemsToShow: 20 }); – Superdooperhero

+0

actualizado a la última jQuery y la interfaz de usuario, pero aún nada: Superdooperhero

6

Este es el código:

<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> 

y este es el 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"); 
%> 
+0

Mi JSP devolvió una cadena en lugar de JSON. Tu scriptlet corrigió eso. ¡Gracias! – bergie3000

1

Desde un archivo JSP, forma más sencilla de crear una salida JSON está utilizando la biblioteca "JSON-taglib".

http://json-taglib.sourceforge.net/

Todo lo que tiene que hacer es:

1) Incluir el archivo jar de la biblioteca. Puede incluirlo descargando el archivo jar directamente o agregando la dependencia pom. El informe de Maven de este taglib se puede encontrar aquí; http://maven.nuxeo.org/nexus/content/repositories/public/atg/taglib/json/json-taglib/0.4.1/

2) Agregar siguiente línea en la definición taglib

3) Asegúrese de que el tipo de contenido resultado de la página es JSON

4) A continuación, sólo tiene que utilizar el taglib

Aquí es un código de muestra

<%@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"/> 
Cuestiones relacionadas