Pregunta

Quiero llenar una propiedad de mapa en una acción Struts2 desde un JSP. ¿Cuál es el formato de los nombres de datos que debo utilizar? Inicialmente Estoy interesado en llenar un Map pero en el futuro me gustaría ser interesante en llenar un Map donde el DomainClass tiene sus propias propiedades.

¿Fue útil?

Solución

Tengo una acción, con una propiedad de la siguiente manera -

private Map<String,String> assetProps;
...
public Map<String, String> getAssetProps() {
    return assetProps;
}

public void setAssetProps(Map<String, String> assetProps) {
    this.assetProps = assetProps;
}

Para establecer los valores en el mapa, hay básicamente dos pasos. En primer lugar, no se puede crear una instancia OGNL el mapa, por lo que depende de usted. En mi acción, que implementan la interfaz que se puede preparar, pero instanciarlo antes de ejecutar la 'entrada public String ()' método de la siguiente manera -

public class EditAction extends ActionSupport implements Preparable {
...
    public void prepare() {
        // just satisfying Preparable interface so we can have prepareInput()

    }

    public void prepareInput() throws Exception {
        assetProps = new HashMap<String,String>();
    }

Ahora, el objeto no es nulo, puedo usar sintaxis similar a la siguiente en el JSP -

  <s:iterator value="asset.properties" var="prop">
    <sjx:textfield name="%{'assetProps[\\'' +#prop.propName +'\\']'}" 
           value="%{#prop.propValue}" 
           label="%{#prop.propName}" size="25"/>
  </s:iterator>

El iterador tira de un conjunto de objetos de la pila y itera sobre ella. La parte importante es el "nombre =" sección, observe las cotizaciones de doble escape individuales. De esta manera, cuando la página se representa, el nombre del elemento de entrada se convierte en (por ejemplo) - assetProps [ 'Tamaño de la pantalla']. Cuando se envía la página, dentro de la "public void ejecutar ()" método, assetProps es totalmente poblada.

Otros consejos

Aquí hay otro código de hacer algo similar fragmento, en caso de que ayuda a alguien.

<s:iterator value="storageIds" var="sids">
    <s:hidden name="%{'storageIds[\\'' + key +'\\']'}" value="%{#sids.value}"/>
</s:iterator>

Mi acción tiene una Map<String,String> llamado storageIds

Cuando se repite una determinación mapa, clave y el valor de las propiedades Map.Entry.

Probar. Trabajando perfectamente para mí

<s:iterator value="configMap" id="daa">
    <s:hidden name="%{'configMap[\\'' + key +'\\']'}" value="%{#daa.value}" />
</s:iterator>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top