java jsp struts2 displaytag pagecontext

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 atributo id 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, llamado id_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 siempre pageContext.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, busca request / 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.