resource loadbundle internacionalizacion basename application javascript jsp jsp-tags

javascript - loadbundle - jsf set locale



Usar JavaScript dentro de una etiqueta JSP (4)

He visto esta pregunta sobre la importación de archivos js relacionados con el contenido de la etiqueta. Tengo un problema similar, aquí tengo una etiqueta jsp que genera algo de HTML y tiene una implementación js genérica que maneja el comportamiento de este HTML. Además, necesito escribir algunas declaraciones de inicialización, para poder usarlas luego a través de JavaScript. Para poder utilizar este "controlador" dentro de mi JavaScript, debe ser de alguna manera accesible.

La pregunta es ... ¿Es correcto escribir etiquetas <script> en línea junto con mi HTML para propósitos de inicialización e inicialización (personalmente no creo que sea muy elegante)? Y acerca de ser accesible para el mundo de JS, ¿debería dejar una referencia global de mi objeto controlador (no tan elegante como creo), hay mejores formas de hacerlo?


Aunque estoy de acuerdo en que no es del todo elegante, se me conoce que lo hago algunas veces cuando se combinan las decisiones del lado del servidor con un entorno integrado en AJAX. Hacer eco de las etiquetas <script> en línea para inicializar algunas variables no es algo terrible, siempre y cuando nadie lo vea.

En cuanto a mejores métodos, no los conozco. Lo he hecho tan raramente que no he buscado una solución más elegante o "adecuada".


Debes esforzarte por javascript en sus propios archivos. Esto generalmente se hace con Mejora progresiva . Pero algunas veces no puede elegir, por ejemplo, cuando el mismo JSP procesa páginas en diferentes idiomas. Aquí hay un ejemplo de la vida real:

El JSP:

<script src="/javascript/article_admin.js"></script> <script type="text/javascript"> NP_ArticleAdmin.initialize({ text: { please_confirm_deletion_of: ''<i18n:output text="please.confirm.deletion.of"/>'', this_cannot_be_undone: ''<i18n:output text="this.cannot.be.undone"/>'' } }); </script>

El javascript (article_admin.js):

/*global NP_ArticleAdmin, jQuery, confirm */ NP_ArticleAdmin = function ($) { var text; function delete_article(event) { var article = $(this).parents("li.article"), id = article.attr("id"), name = article.find("h3.name").html(); if (confirm(text.please_confirm_deletion_of + name + text.this_cannot_be_undone)) { $.post("/admin/delete_article", {id: id}); article.fadeOut(); } event.preventDefault(); return false; } function initialize(data) { text = data.text; $("#articles a.delete").click(delete_article); } return {initialize: initialize}; }(jQuery);

En este ejemplo, el único javascript en el archivo JSP es la parte que debe estar allí. La funcionalidad central está separada en su propio archivo js.


Está bien con el uso de etiquetas <script> en línea con HTML. Hay momentos en que es necesario, pero en cuanto a mejores formas, no lo sé. Sin hacer que las cosas parezcan más complicadas, es más fácil usar la etiqueta <script> luego tratar de encontrar una forma de implementar archivos js.


No estoy del todo seguro de lo que pregunta aquí, pero no hay nada de malo en incluir etiquetas <script> en el JSP para crear instancias de código JavaScript. A menudo sigo este modelo, escribiendo el código de la biblioteca en archivos javascript externos y luego llamando a los constructores a mis objetos desde las etiquetas <script> .

Esto hace que la depuración sea fácil, ya que la lógica está en los archivos externos (y Firebug parece tener problemas con la depuración del código de JavaScript en línea). Las bibliotecas se almacenan en caché, pero los datos que las crean no (lo que es el comportamiento deseado).

La alternativa es tener el código de instanciación generado dinámicamente en un archivo javascript externo o llamada AJAX. He hecho esto también, con resultados positivos.

Creo que el factor decisivo es la cantidad de datos dinámicos que tiene. Si necesita representar estructuras de datos de gran tamaño, lo publicaría a través de una llamada AJAX que devuelve JSON. Si es una simple llamada a un constructor, póngalo en el JSP.

En cuanto a la variable global, a menudo tendré un global para el objeto de nivel superior que arranca todo. Dentro de eso, están todas las otras referencias a los objetos auxiliares.