tutorial tag examples example jsp struts2 struts

jsp - tag - struts2 maven



Struts2 select tag-Agrega dinĂ¡micamente opciones (1)

Estoy trabajando en migrar un proyecto de Struts1 a Struts2. Y he encontrado la siguiente pieza de código.

<html:select ...> <logic:iterate id="something" name="" type=""> <logic:equal name="something" property="" value=""> <html:option value=""><bean:write ... /></html:option> </logic:equal> </logic:iterate> </html:select>

Comprueba el valor en el iterador y agrega opciones a la lista de selección de forma dinámica si se cumple la condición.

¿Cómo puedo lograr algo similar con la etiqueta de selección de Struts2?

AFAIK, la etiqueta de selección de Struts2 ni siquiera funcionará correctamente con la etiqueta de opción html simple.


De hecho, la etiqueta de select Struts2 no permite usar etiquetas de option html en el cuerpo de la etiqueta. Esto se debe a que usa el atributo list para proporcionar datos en forma de un objeto con pares clave / valor. Puede usar listKey y listValue para definir qué propiedades del objeto se usarán para las opciones de representación. Puede ver la Guía de referencia de etiquetas UI para la etiqueta de select . Tiene muchos atributos que le permiten personalizar renderizar html.

Uso práctico de la etiqueta de selección: rara vez se usa. Es útil si desea mostrar listas de tamaño fijo o un mapa creado a través de OGNL en el JSP. Por ejemplo

<s:select label="Months" name="months" headerKey="-1" headerValue="Select Month" list="#{''01'':''Jan'', ''02'':''Feb'', [...]}" value="selectedMonth" required="true" />

Para listas grandes, considere utilizar un widget autocompleter . También puede usar un autocompletador como cuadro de selección o seleccionar widget como autocompletador. Todos los ejemplos de widgets de select y autocompleter que puede ver en Struts2 Jquery Showcase .

Al migrar de Struts1 a Struts2, se ha enfrentado al problema de presentar la etiqueta de select html representada porque Struts2 no permite las opciones dentro del cuerpo de la etiqueta. Entonces, construir la lista de opciones podría hacerse en el método de prepare() de la acción. Un ejemplo de este uso se puede encontrar leyendo esta respuesta .

Por qué este enfoque es preferible porque está trabajando con el modelo desde el controlador , no desde la vista, y cuando el modelo está listo para mostrar, está utilizando algunas etiquetas o widgets para renderizar html o llenar DOM. O puede usar servicios Ajax o Angular para cargar un modelo desde el controlador Struts2. Los datos se transfieren en formato JSON. JSON es una herramienta muy poderosa para transferir datos entre frameworks de Java y JavaScript.

Ahora, si aún desea utilizar el mapa para representar la etiqueta de select html a través del iterador, puede usar el siguiente código.

<select id="monthId" name="form.monthId"> <s:iterator var="month" value="%{months}"> <s:if test="month.value != ''May''"> <option value="${month.key}" ${month.key == form.monthId?''selected="selected"'':''''}> <s:property value="%{month.value}"/> </option> </s:if> </s:iterator> </select>

Tenga en cuenta que las expresiones EL usadas para preseleccionar las opciones deberían tener acceso a las variables ValueStack debido al wrapper de solicitud de Struts. Vea Cómo usamos JSTL con el marco .