Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Token generado por el DisplayTag

Estas en el tema de Token generado por el DisplayTag en el foro de Java en Foros del Web. Hola, he comprobado que el DisplayTag genera un token por cada tabla donde se usa este control. En mi caso es este: <tr> <th class="hidden ...
  #1 (permalink)  
Antiguo 13/10/2014, 09:37
 
Fecha de Ingreso: septiembre-2014
Mensajes: 8
Antigüedad: 10 años, 2 meses
Puntos: 0
Token generado por el DisplayTag

Hola,
he comprobado que el DisplayTag genera un token por cada tabla donde se usa este control. En mi caso es este:

<tr>
<th class="hidden sortable sorted order2">
<a href="?d-1340302-p=1&amp;d-1340302-o=2&amp;d-1340302-s=0">Identificador</a></th>
<th class="sortable">
<a href="?d-1340302-p=1&amp;d-1340302-o=2&amp;d-1340302-s=1">Código Jira</a></th>
<th class="sortable">
<a href="?d-1340302-p=1&amp;d-1340302-o=2&amp;d-1340302-s=2">Nombre</a></th>
<th class="sortable">
<a href="?d-1340302-p=1&amp;d-1340302-o=2&amp;d-1340302-s=3">Primer Apellido</a></th>
<th class="sortable">
<a href="?d-1340302-p=1&amp;d-1340302-o=2&amp;d-1340302-s=4">Segundo Apellido</a></th>
<th class="sortable">
<a href="?d-1340302-p=1&amp;d-1340302-o=2&amp;d-1340302-s=5">Email</a></th>
<th class="sortable">
<a href="?d-1340302-p=1&amp;d-1340302-o=2&amp;d-1340302-s=6">Teléfono de Contacto</a></th>
<th class="sortable">
<a href="?d-1340302-p=1&amp;d-1340302-o=2&amp;d-1340302-s=7">Rol</a></th>
<th>Acciones</th></tr></thead>
...

El caso es que yo uso ese token para ir directamente a una de las páginas en que el DisplayTag ha paginado los resultados obtenidos.
Como va enviado como parámetro por GET al pinchar sobre una de las páginas, yo capturo ese parámetro (d-1340302-p=1) y le doy el valor que deseo para que vaya a la página que yo quiero.

Mi pregunta es: ¿algún día puede cambiar dicho token? ¿cómo ha sido generado?... es que cuando cambie, mi desarrollo dejará de funcionar, lógicamente.

Gracias!!
  #2 (permalink)  
Antiguo 13/10/2014, 09:59
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 4 meses
Puntos: 182
Respuesta: Token generado por el DisplayTag

Buenas,

Cita:
¿algún día puede cambiar dicho token? ¿cómo ha sido generado?
Como crees que te podemos responder a esa pregunta si no sabemos como esta desarrollado?

Deberias preguntar a quien ha hecho el desarrollo y lo mantiene no? Si alguien conoce el algoritmo que sigue dicho token para generarse sera el.


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 14/10/2014, 02:55
 
Fecha de Ingreso: septiembre-2014
Mensajes: 8
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Token generado por el DisplayTag

Lo leo de nuevo y veo que no lo expliqué del todo bien (me están intentado exprimir tanto en el trabajo que lo tengo que hacer todo con prisas).

Lo de arriba es el código que se genera (desde el navegador: "ver código fuente"), pero lo que escribí yo fue este código:
(el "token d-1340302-p" (no se me ocurre otra forma mejor de llamarlo), lo genera la propia librería de displaytag.jar, y mi duda es saber si es dinámico, o por el contrario va a permanecer con ese valor para siempre)

<div class="display-table">
<display:table name="listPersonas" requestURI="" id="persona" class="table table-condensed table-bordered table-hover" pagesize="10" defaultsort="1" export="true" defaultorder="descending">
<display:setProperty name="basic.msg.empty_list" value="No se encontraron registros para esta búsqueda" />
<display:column property="id" title="Identificador" class="hidden" headerClass="hidden" sortable="true" />
<display:column property="codJira" title="Código Jira" headerClass="sortable" sortable="true" />
<display:column property="nombre" title="Nombre" headerClass="sortable" sortable="true" />
<display:column property="primerApellido" title="Primer Apellido" headerClass="sortable" sortable="true" />
<display:column property="segundoApellido" title="Segundo Apellido" headerClass="sortable" sortable="true" />
<display:column property="email" title="Email" headerClass="sortable" sortable="true" />
<display:column property="telefonoContacto" title="Teléfono de Contacto" headerClass="sortable" sortable="true" />
<display:column property="rol.nombre" title="Rol" headerClass="sortable" sortable="true" />
<sec:authorize access="hasAnyRole('ROLE_CONTROLSUMA.GESTOR','ROLE _CONTROLSUMA.ADMIN')">
<display:column media="html" title="Acciones">
<a href="${pageContext.request.contextPath}/auth/persona/edit?id=${persona.id}" class="btn btn-xs btn-info" title="Editar">
<i class="icon-folder-open icon-white"></i> <span class="glyphicon glyphicon-edit"></span></a>
<a href="${pageContext.request.contextPath}/auth/persona/delete?id=${persona.id}" class="btn btn-xs btn-info" title="Eliminar" onclick="return confirm('¿Estás seguro de eliminar ${persona.codPersona} ?')">
<i class="icon-folder-open icon-white"></i> <span class="glyphicon glyphicon-trash"></span></a>
</display:column>
</sec:authorize>
</display:table>
</div>
  #4 (permalink)  
Antiguo 14/10/2014, 05:26
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 4 meses
Puntos: 182
Respuesta: Token generado por el DisplayTag

Buenas,

Disculpame a mi tambien por el malentendido. DisplayTag. No usaba eso desde hace anios! (los buenos tiempos de Struts). Yo habia entendido que era una customtag que habia hecho alguien.

Ok, no tengo tampoco mucho tiempo pero te puedo orientar, creo. Si mal no recuerdo, la tag column admite un atributo href. Si lo estableces te va a permitir sobreescribir ese valor sin necesidad de que lo genere el. Puedes probarlo y comentas si algo cambia?

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #5 (permalink)  
Antiguo 14/10/2014, 08:26
 
Fecha de Ingreso: septiembre-2014
Mensajes: 8
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Token generado por el DisplayTag

En el primer intento no me ha funcionado, he puesto:

<div class="display-table">
<display:table name="listPersonas" requestURI="" id="persona" class="table table-condensed table-bordered table-hover" pagesize="10" defaultsort="1" export="true" defaultorder="descending">
<display:setProperty name="basic.msg.empty_list" value="No se encontraron registros para esta búsqueda" />
<display:column href="displayPersonas" property="id" title="Identificador" class="hidden" headerClass="hidden" sortable="true" />
<display:column href="displayPersonas" property="codJira" title="Código Jira" headerClass="sortable" sortable="true" />
<display:column href="displayPersonas" property="nombre" title="Nombre" headerClass="sortable" sortable="true" />
<display:column href="displayPersonas" property="primerApellido" title="Primer Apellido" headerClass="sortable" sortable="true" />
<display:column href="displayPersonas" property="segundoApellido" title="Segundo Apellido" headerClass="sortable" sortable="true" />
<display:column href="displayPersonas" property="email" title="Email" headerClass="sortable" sortable="true" />
<display:column href="displayPersonas" property="telefonoContacto" title="Teléfono de Contacto" headerClass="sortable" sortable="true" />
<display:column href="displayPersonas" property="rol.nombre" title="Rol" headerClass="sortable" sortable="true" />
<sec:authorize access="hasAnyRole('ROLE_CONTROLSUMA.GESTOR','ROLE _CONTROLSUMA.ADMIN')">
<display:column media="html" title="Acciones">
<a href="${pageContext.request.contextPath}/auth/persona/edit?id=${persona.id}" class="btn btn-xs btn-info" title="Editar">
<i class="icon-folder-open icon-white"></i> <span class="glyphicon glyphicon-edit"></span></a>
<a href="${pageContext.request.contextPath}/auth/persona/delete?id=${persona.id}" class="btn btn-xs btn-info" title="Eliminar" onclick="return confirm('¿Estás seguro de eliminar ${persona.codPersona} ?')">
<i class="icon-folder-open icon-white"></i> <span class="glyphicon glyphicon-trash"></span></a>
</display:column>
</sec:authorize>
</display:table>
</div>


Y sin embargo no he obtenido el resultado deseado:

<table id="persona" class="table table-condensed table-bordered table-hover">
<thead>
<tr>
<th class="hidden sortable sorted order2">
<a href="?d-1340302-p=1&amp;d-1340302-o=2&amp;d-1340302-s=0">Identificador</a></th>
<th class="sortable">
<a href="?d-1340302-p=1&amp;d-1340302-o=2&amp;d-1340302-s=1">Código Jira</a></th>
<th class="sortable">
<a href="?d-1340302-p=1&amp;d-1340302-o=2&amp;d-1340302-s=2">Nombre</a></th>
<th class="sortable">
<a href="?d-1340302-p=1&amp;d-1340302-o=2&amp;d-1340302-s=3">Primer Apellido</a></th>
<th class="sortable">
<a href="?d-1340302-p=1&amp;d-1340302-o=2&amp;d-1340302-s=4">Segundo Apellido</a></th>
<th class="sortable">
<a href="?d-1340302-p=1&amp;d-1340302-o=2&amp;d-1340302-s=5">Email</a></th>
<th class="sortable">
<a href="?d-1340302-p=1&amp;d-1340302-o=2&amp;d-1340302-s=6">Teléfono de Contacto</a></th>
<th class="sortable">
<a href="?d-1340302-p=1&amp;d-1340302-o=2&amp;d-1340302-s=7">Rol</a></th>
<th>Acciones</th></tr></thead>
<tbody>
<tr class="odd">
<td class="hidden">
<a href="displayPersonas">466</a></td>
<td>
<a href="displayPersonas">n.gutrez</a></td>
<td>
<a href="displayPersonas">Nora</a></td>
<td>
<a href="displayPersonas">Gut</a></td>
<td>
<a href="displayPersonas">Álv</a></td>
<td>
<a href="displayPersonas">[email protected]</a></td>
<td>
<a href="displayPersonas"></a></td>
<td>
<a href="displayPersonas">Analiserno</a></td>
<td>

Por lo visto, ahi me pone un enlace a cada elemento de datos, y lo que pretendo es que me ponga el nombre del enlace que yo quiera en los links para acceder a las distintas páginas.
Sigo probando...
  #6 (permalink)  
Antiguo 14/10/2014, 09:03
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 4 meses
Puntos: 182
Respuesta: Token generado por el DisplayTag

Buenas,

Tienes razon, efectivamente el link de ordenacion header de la tabla no se puede configurar, ya que es un dato interno y si se cambia la ordenacion dejara de funcionar.

Para ver como funciona bajate el codigo fuente:
http://sourceforge.net/projects/disp...c.zip/download

Y mira en la clase src/main/java/org/displaytag/render/HtmlTableWriter.java
En dicha clase puedes ver como construye la estructura de la tabla y como genera el identificador para ordenar (metodo getSortingHref).
Si tienes curiosidad, al final llama a una utilidad llamada ParamEncoder que genera asi el identificador:

Código Java:
Ver original
  1. public ParamEncoder(String idAttribute)
  2.     {
  3.         // use name and id to get the unique identifier
  4.         String stringIdentifier = "x-" + idAttribute; //$NON-NLS-1$
  5.  
  6.         // get the array
  7.         char[] charArray = stringIdentifier.toCharArray();
  8.  
  9.         // calculate a simple checksum-like value
  10.         int checkSum = 17;
  11.  
  12.         for (int j = 0; j < charArray.length; j++)
  13.         {
  14.             checkSum = 3 * checkSum + charArray[j];
  15.         }
  16.  
  17.         // keep it positive
  18.         checkSum &= 0x7fffff;
  19.  
  20.         // this is the full identifier used for all the parameters
  21.         this.parameterIdentifier = "d-" + checkSum + "-"; //$NON-NLS-1$ //$NON-NLS-2$
  22.     }

En tu caso, a partir del id "persona" genera el checkSum "1340302".

Como bien dices, el basarte en dicho codigo es muy feo.
Sin embargo tambien es cierto que seguramente dicho identificador no va a cambiar, ya que esa libreria no evoluciona desde 2008. De hecho, la verdad es que pensaba que nadie la usaba ya en nuevos desarrollos


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #7 (permalink)  
Antiguo 14/10/2014, 09:20
 
Fecha de Ingreso: septiembre-2014
Mensajes: 8
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Token generado por el DisplayTag

Gracias!! Mis dudas despejadas

Etiquetas: displaytag, token, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:04.