En ocaciones en el desarrollo de presentación de una aplicación necesitamos hacer validaciones en la presentación, como por ejemplo dadas unas condicones XY renderize un boton ó muestre un link, etc. para este tipo de cosas debemos usar valores booleanos ‘true’ or ‘false’ con el tag render..por ejemplo <h:commandButton value=»valor» action=»#{myBean.accion}» rendered=»false» /> ..con esta linea construimos un boton con label «valor» que no se va mostrar debido a que rendered esta en false (es decir no mostrar).
Algunas veces no es suficiente una variable booleana para decidir este tipo de cosa,es necesario hacer comparaciones logicas que den como resultado un booleano. Por ejemplo un link que muestre un reporte se muestre siempre y cuando el rol del usuario es admon ó gerente, y se oculta en cualquier otro caso. EL ( Expression Language ) nos permite una serie de literales, operadores y palabras reservadas para este tipo de acciones:
Literales
- Boolean: true and false
- Integer: como en Java
- Floating point:como en Java
- String: con simple o dobles comillas; "es escape como \", ‘ es escape como\‘,y\es escape como\\.
- Null: null
Operadores
- Arithmeticos: +, - (binary), *, /, div, %, mod, - (unary)
- Logicos: and, &&, or, ||, not, !
- Relationales: ==, eq, !=, ne, <, lt, >, gt, <=, ge, >=, le. Comparisones pueden ser echas sobre otrosvalores o tambien booleans, string, integer, or floating point literals.
- Empty: Puede ser usado para determinar si es un valor null o empty.
- Conditional: A ? B : C. Evalua B or C, dependiendo sobre el resultado de evaluacion de A.
Los siguientes operadores de «mayor» o «menor», derecha a isquierda como los siguientes:
- [] .
- () (changes precedence of operators)
- - (unary) not ! empty
- * / div % mod
- + - (binary)
- < > <= >= lt (lower than) gt (greater than) le (lower than or equal) ge (greater than or equal)
- == != eq (equal) ne (not equal)
- && and
- || or
- ? :
Por ejemplo si deseamos mostrar un boton de una lista de archivos que vamos a procesar siempre y cuando el identificador del formato sea diferente de 99991 y 99992 y que el estado de este archivo sea verdadero:
<h:commandButton immediate="true" value="Procesar" rendered="#{formato.estado and ( (formato.idFormato ne '99991') and (formato.idFormato ne '99992'))}" action="#{accionesBBean.cargarFormato}" />
En el rendered esta validando: si formato.estado es ‘true’ o ‘false’ Y (por el and) ,un parentesis que agrupa las siguientes validaciones: si el formato.id No es igual a 99991 Y formato.idFormato No es igual 99991….este tipo de validaciones es recomendable hacerlas en lo que refiere a la logica del negocio..es un ejemplo como poder sacar provecho de lo que ofrece EL.
Recomiendo los siguientes links, para revisar más ejemplos de validación con EL:
http://developers.sun.com/docs/jscreator/help/jsp-jsfel/jsf_expression_language_intro.html
http://www.java-samples.com/showtutorial.php?tutorialid=550 http://gentle.compilertools.net/book/relations.html –>Este es como para comprender más el uso y funcionamiento de ge,gt,lt,le
http://desarrollandoideas.com.ar/2008/08/14/jsf-expression-language-el/ http://mediawiki.uca.es/index.php/JSF …jsf general
http://courses.coreservlets.com/Course-Materials/pdf/jsf/04-Expression-Language.pdf ..detalle de Expression Language
que tal me parecio interesante lo que publicaste, sobre todo lo que mencionas de los botones o lo que le corresponda ver a un admin o a un usuario normal. y el caso es que estoy tratando de realizar algo parecido a eso. pues necesito mostrar un boton o botones durante cierto tiempo…el admin en este caso activara el boton durante un tiempo determinado y posteriormente terminado el tiempo este boton o link tiene que desactivarse…tendras alguna forma de ayudarme o ejemplos..estoy trabajando con JSF,EJB gracias de antemano…
que más Carlos!! le recomendaria añadir algo de jquery en la presentación de su aplicación con un contador de tiempo o algo asi para mostrar un boton; o por otro lado si usa un framework de JSF como ice faces que permite cierta sincronización de la rpesnetación con unos servlets para renderizar elementos como barras progresivas o botones..muy tipo AJAX; ya en la funcion en si..el acceso a esta…intentar algo con una validación de regsitrod e la abse de datos que diga hasta que tiempo o cuanto tiempo a partir del actual pueda acceder o algo asi no se. espero le sirva
Muy bueno el artículo, y los enlaces con los ejemplo.
Quiero dejar otro ejemplo de otro blog:
http://adfsalvaje.blogspot.com.es/2014/04/operadores-de-expression-language.html
muy buen articulo.