viernes, 28 de marzo de 2014

JSF - Lenguaje de Expresión y Objetos Implicitos


JSF Lenguaje de Expresión y Objetos Implicitos

Lenguajes de Expresión (wikipedia)

El lenguaje de expresiones comenzó como una parte de la JavaServer Pages Standard Tag Library (JSTL) y fue llamado originalmente SPEL (Simplest Possible Expression Language), y después simplemente Expression Language (EL). Era un lenguaje de script que permitía el acceso a los componentes de
Java(JavaBeans) a través de JSP. Desde JSP 2.0, se ha utilizado dentro de las etiquetas JSP para separar el código Java de JSP, y para permitir un acceso más fácil a los componentes de Java (que en código Java).Con los años, el lenguaje de expresiones ha evolucionado para incluir una funcionalidad más avanzada y fue incluido en la especificación JSP 2.0. El scripting se hizo más fácil para los diseñadores de contenido web que tienen poco o prácticamente ningún conocimiento del núcleo del lenguaje Java. Este lenguaje de script convirtió verdaderamente a JSP en un lenguaje de script. Antes de EL, JSP consistía en algunas etiquetas especiales como scriptlets, expresiones, etc. dentro de las cuales el código Java era escrito de forma explícita. Con EL el diseñador de contenido web sólo necesita saber cómo hacer las llamadas apropiadas a los métodos básicos de Java.EL era, tanto sintáctica como semánticamente, similar a las expresiones de JavaScript no hay conversión de tipos explícita
  • las conversiones de tipos se hacen generalmente de forma implícita
  • las comillas dobles y simples son equivalentes
  • objeto.propiedad tiene el mismo significado que objeto['propiedad']
EL también liberó al programador de tener que conocer las particularidades de cómo se accede en realidad a los valores: objeto.propiedad puede significar (dependiendo de qué objeto se trata) o bien object.get("propiedad") o object.getProperty("propiedad") o object.getPropiedad(), etc.
Durante el desarrollo de JSP 2.0, la tecnología JavaServer Faces fue publicada, la cual también necesitaba un lenguaje de expresiones, pero el lenguaje de expresiones definido en la especificación JSP 2.0 no satisfacía todas las necesidades para el desarrollo con la tecnología JSF. La limitación más obvia es que sus expresiones son evaluadas de inmediato. Y también, los componentes de JSF necesitan una manera de invocar métodos de objetos del lado del servidor. Un lenguaje más poderoso fue creado con las siguientes nuevas características:
  • Expresiones diferidas, que no se evalúan de inmediato
  • Expresiones que pueden establecer (set), así como recuperar datos (get)
  • Expresiones de métodos, que pueden invocar métodos
El nuevo lenguaje de expresiones funcionó bien para los fines de JSF. Pero los desarrolladores tenían problemas en la integración de JSP EL con JSF EL debido a conflictos. Debido a estas incompatibilidades, la iniciativa "lenguaje de expresión unificado" comenzó para unificar estos lenguajes de expresiones. A partir de JSP 2.1, los lenguajes de expresión de JSP 2.0 y JSF 1.1 se han fusionado en un solo lenguaje de expresiones unificado (EL 2.1).
La versión 3.0 del lenguaje de expresiones (la palabra "unificado" ya no se consideró necesaria) se desarrolló en un JSR independiente de las especificaciones de JSP y JSF, en el JSR-341. Se agregaron algunas nuevas características, las más notables fueron los equivalentes en EL a los streams y expresiones lambda de Java 7.1El nuevo EL unificado es una unión de los lenguajes de expresiones de JSP y JSF. Además de las características ya disponibles en el EL de JSP, el EL unificado tiene las siguientes características:
  • Evaluación diferida
  • Soporte para expresiones que pueden establecer valores y expresiones que pueden invocar métodos
  • Una API enchufable para resolver expresiones

Lista de Operadores de EL

Lista de Orden de Precedencia


Objetos Implicitos

Son nombres de variables que hacen referencia a Objetos de uso común como el HttpServletRequest en un request, los Parámetros de Request etc.

Aquí está una lista de Objetos Implitos de JSF




<h:commandButton value="Ejecutar" action="#{formBean.save}" styleClass="btn btn-sm btn-primary">
    <h:selectOneMenu value="#{formBean.form.formaPago}"
      converter="#{formBean.converter}" label="forma Pago">
      <f:selectItem value="#{null}"
      itemLabel="-- Seleccione Forma de Pago --"></f:selectItem>
      <f:selectItems var="item" value="#{formBean.formaPagos}"
      itemLabel="#{item.label}" id="select_items"></f:selectItems>
      </h:selectOneMenu>
<h:outputText value="El Cliente es Premium"
      rendered="#{formBean.form.premium and !formBean.edit}"
      style="border:1px solid red;background:red;color:white"></h:outputText>
<h:outputText value="#{formBean.form.id mod 2 == 0?'Par':'Impar'}"
       rendered="#{!formBean.edit}"></h:outputText>
      
      <h:outputText value="El Pago Fue contado"
       rendered="#{!formBean.edit and formBean.form.formaPago.id==1}"></h:outputText>
      
      <h:outputText value="El Pago No fué Contado"
       rendered="#{!formBean.edit and formBean.form.formaPago.id ge 1}"></h:outputText>
<f:metadata>
 <f:viewParam name="id" value="#{formBean.id}"></f:viewParam>
</f:metadata>
 static String findNameById(Integer id) {
  if (id == null)
   return "completar el nombre";
  if (id == 1) {
   return "Nery Patán";
  } else if (id == 2) {
   return "Roberto Martínez'";
  } else if (id == 3) {
   return "Michael Asturias";
  } else if (id == 4) {
   return "Erick Ponce";
  } else if (id == 5) {
   return "Javier Ralda";
  } else {
   return "Federico Arriola";
  }
 }

 public void setId(Integer id) {
  form.setId(id);
  form.setName(findNameById(id));
  this.id = id;
 }

 public Integer getId() {
  return id;
 }

No hay comentarios:

Publicar un comentario