java - Struts2, convertir s: seleccionar lista para mostrar la columna Etiqueta
jsp displaytag (1)
Tengo la siguiente lista de selección en jsp:
<td>
<s:select list = "models"
listValue = "modelName"
listKey = "modelId"
multiple = "true"
name = "models" />
</td>
Elegí implementar la paginación con la biblioteca de display Tag
, por lo que quiero convertirla en una columna de visualización y mostrar uno o más modelos de la lista. ¿Cómo puedo hacer esto? A continuación se muestra mi tabla de visualización con las otras columnas:
<display:table name = "cars"
requestURI = "/listCar.action"
pagesize = "10">
<display:column property = "name" title = "name" />
<display:column titleKey = "models" >
<!--------------model list?-------------->
</display:column>
<display:column property = "year" title = "year" />
</display:table>
En primer lugar, debe hacer que DisplayTag presione el valor en un contexto al que pueda acceder:
Objetos implícitos creados por la tabla
Si agrega un atributoid
la etiqueta de la tabla hace que el objeto correspondiente a la fila determinada esté disponible en el contexto de la página para que pueda usarlo dentro del código scriptlet o alguna otra etiqueta. Otro objeto implícito expuesto por la etiqueta de tabla es el número de fila, llamadoid_rowNum
.Estos objetos se guardan como atributos en el ámbito de la página (puede acceder a él utilizando
pageContext.getAttribute("id")
). También se definen como variables anidadas (accesibles mediante<%=id%>
), pero solo si el valor del atributo de id no es una expresión de tiempo de ejecución. La forma preferida de recuperar el valor es usar siemprepageContext.getAttribute()
.Si no especifica el atributo id, la etiqueta de tabla no agrega ningún objeto al pageContext
Entonces necesitas acceder a ese contexto. En Struts2, el pageContext
está disponible a través de #attr
:
Struts 2 Objetos nombrados :
#attr[''foo'']
o#attr.foo
Acceso a
PageContext
si está disponible; de lo contrario, buscarequest
/session
/application
respectivamente
Entonces el código sería:
<display:table id = "currentRowInPageContext"
name = "cars"
requestURI = "/listCar.action"
pagesize = "10">
<display:column property = "name" title = "name" />
<display:column titleKey = "models" >
<s:select list = "%{#attr.currentRowInPageContext.models}"
listValue = "modelName"
listKey = "modelId"
multiple = "true"
name = "models" />
</display:column>
<display:column property = "year" title = "year" />
</display:table>
Hoy en día, sin embargo, hay mejores alternativas que DisplayTag, por ejemplo, jQuery DataTables y jQuery jqGrid ; para este último también hay un plugin ( struts2-jquery-grid-plugin ) que le ayuda a usar la grilla sin conocer su sintaxis, simplemente conociendo las etiquetas struts2.