Domanda

Voglio popolare una proprietà mappa su un'azione Struts2 da una JSP. Qual è il formato dei nomi dati che devo usare? Inizialmente Sono interessato a compilazione di un Map ma in futuro vorrei essere interessante in compilazione di un Map dove il DomainClass ha proprietà di sua iniziativa.

È stato utile?

Soluzione

Ho un'azione, con una proprietà come segue -

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

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

Per impostare i valori sulla carta, ci sono fondamentalmente due passaggi. Prima di tutto, OGNL non può istanziare la mappa, quindi spetta a voi. Nella mia azione, a implementare l'interfaccia essere preparati, ma un'istanza prima di eseguire l' 'ingresso public String ()' metodo come segue -

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>();
    }

Ora, l'oggetto non è nullo, posso utilizzare una sintassi simile a quanto segue nella JSP -

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

L'iteratore tira un insieme di oggetti dallo stack e scorre su di esso. La parte importante è il "name =" sezione, si noti i doppi apici escape singoli. In questo modo, quando la pagina esegue il rendering, il nome dell'elemento ingresso diventa (per esempio) - assetProps [ 'Screen size']. Al momento della presentazione della pagina, all'interno della "public void execute ()" metodo assetProps è completamente popolato.

Altri suggerimenti

Ecco un altro frammento di codice a fare qualcosa di simile, in caso aiuta qualcuno.

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

La mia azione ha un nome Map<String,String> storageIds

Quando l'iterazione una risoluzione Map, chiave e il valore delle proprietà Map.Entry.

Prova questo. Lavorare perfettamente per me

<s:iterator value="configMap" id="daa">
    <s:hidden name="%{'configMap[\\'' + key +'\\']'}" value="%{#daa.value}" />
</s:iterator>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top