Имена полей для записей карты Struts2 в JSP - PullRequest
0 голосов
/ 12 апреля 2009

Я хочу заполнить свойство карты в действии Struts2 из JSP. Какой формат имен данных мне следует использовать? Сначала я заинтересован в заполнении карты , но в будущем мне было бы интересно заполнить карту , где у DomainClass есть свои собственные свойства.

Ответы [ 3 ]

3 голосов
/ 24 июня 2009

У меня есть действие со следующим свойством -

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

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

Чтобы установить значения на карте, в основном есть два шага. Во-первых, OGNL не может создать экземпляр карты, так что решать вам. В своем действии я реализую интерфейс Preparable, но создаю его экземпляр перед запуском метода public string input () следующим образом -

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

Теперь объект не нулевой, я могу использовать синтаксис, подобный следующему в JSP -

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

Итератор извлекает набор объектов из стека и перебирает его. Важной частью является раздел "name =", обратите внимание на двойные кавычки. Таким образом, когда страница отображается, имя элемента ввода становится (например) - assetProps ['Screen Size']. Когда страница отправляется внутри метода public void execute (), assetProps заполняется полностью.

2 голосов
/ 04 мая 2011

Вот еще один фрагмент кода, выполняющий нечто подобное, на случай, если он кому-нибудь поможет.

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

Мое действие имеет Map<String,String> с именем storageIds

При итерации карты ключ и значение разрешаются в свойствах Map.Entry.

0 голосов
/ 15 ноября 2013

Попробуйте это. Отлично работает для меня

<s:iterator value="configMap" id="daa">
    <s:hidden name="%{'configMap[\\'' + key +'\\']'}" value="%{#daa.value}" />
</s:iterator>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...