Nomi di campo per Struts2 voci della mappa in una JSP
-
09-09-2019 - |
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
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>