Ссылки на карту Struts в JSP - PullRequest
0 голосов
/ 22 ноября 2011

У меня вопрос сложнее, чем ниже, но я попытался упростить ситуацию.

У меня есть что-то вроде следующего для моей формы:

public class MyForm extends ActionForm {
    private Map<Long, String> myValues;

    public MyForm() {
        setMyValues(new HashMap<Long, String>());
    }

    public Map<Long, String> getMyValues() {
        return myValues;
    }

    public void setMyValues(Map<Long, String> myValues) {
        this.myValues = myValues;
    }

    public Object getMyValue(String key) {
        return getMyValues().get(key);
    }

    public void setMyValue(String key, Object value) {
        getMyValues().put(Long.valueOf(key), value.toString());
    }
}

Если я попробую это на странице JSP для формы, все строки будут иметь значение, кроме последней:

<c:forEach items="${MyForm.myValues}" var="mapEntry">
    <c:out value="${mapEntry.value}" />
    <c:out value="${mapEntry.key}" />
    <c:out value="${MyForm.myValue(mapEntry.key)}" />
</c:forEach>

Последняя строка приводит к разрыву страницы: «Функция myValue должна использоваться с префиксом, если пространство имен по умолчанию не указано». Кто-нибудь знает правильный способ доступа к значению карты для конкретного ключа? Как я уже сказал, это сложнее, чем выше. Мне нужно что-то похожее на эту последнюю строку для работы.

UPDATE

Обратите внимание, что работает следующее, где # - любое целое число:

<textarea name="myValue(#)"><textarea>

1 Ответ

2 голосов
/ 22 ноября 2011

Немедленное значение:

<c:out value="${MyForm.myValues[1]}" />

Ключ из значения формы:

<c:out value="${MyForm.myValues[MyForm.anId]}" />

Ключ из атрибута запроса:

<c:out value="${MyForm.myValues[wat]}"/>

Зачем использовать <c:out>?У нас есть JSP EL.

${MyForm.myValues[wat]}
...