У меня вопрос сложнее, чем ниже, но я попытался упростить ситуацию.
У меня есть что-то вроде следующего для моей формы:
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>