Как получить доступ к атрибуту bean в JSP?

Как мы можем получить доступ к атрибуту bean-компонента в JSP?
Я пытался

<core:forEach var="header" items="${command.headerList}" >
<td><core:out value="${header.columnName}"/></td>
</core:forEach>

где headerList — это список myBean, который имеет атрибут columnName [getter/setter определены в классе]

Expected: он должен напечатать значение в columnName
Actual: он вообще ничего не печатает

также как я могу получить доступ к n-му элементу в списке? Я попытался

${command.headerList[i]}

Output: ничего не отображается.

Редактировать:#

когда я пишу

${command.headerList}

он отображает

com.bean.MyBean@14ecb90, com.bean.MyBean@169b35, com.bean.MyBean@27d572

This is just to let you know that the list is having something

и когда я пишу

${header}

внутри цикла forEach отображается:

javax.servlet.jsp.el.ImplicitObjectELResolver$ImplicitObjects$7@d9d714

That means even header is having value, then why i am unable to print values using

${header.columnName}

person Rakesh Juyal    schedule 10.11.2009    source источник


Ответы (2)


header — это неявный объект в JSP, который сопоставляется с заголовками запроса (HTTP). Полный список неявных объектов см. в спецификации JSP.

Попробуйте сослаться на компонент в отношении области, в которой вы его сохранили (например, requestScope.header). Желательно изменить имя на другое.

person McDowell    schedule 10.11.2009
comment
Боже мой, что теперь сказать. :) я изменил header на header1 и это сработало. +10, если бы я мог :) - person Rakesh Juyal; 11.11.2009

Как мы можем получить доступ к атрибуту bean в JSP? Я попытался

<core:forEach var="header" items="${command.headerList}" >
<td><core:out value="${header.columnName}"/></td>
</core:forEach>

где headerList — это список myBean, который имеет атрибут columnName [getter/setter определены в классе]

Выглядит хорошо. Что происходит вместо этого?

также как я могу получить доступ к n-му элементу в списке? Я попытался

${command.headerList[i]}

Выглядит нормально, пока i инициализирован и находится в области видимости. Что происходит вместо этого?

когда я пишу

${command.headerList}

он отображает

com.bean.MyBean@14ecb90, com.bean.MyBean@169b35, com.bean.MyBean@27d572

Он должен включать [ в начале и ] в хвосте, но для остатка это выглядит нормально, если вы не переопределили Object#toString() в классе MyBean. Чего ты ожидал?

и когда я пишу

${header}

внутри цикла forEach отображается:

javax.servlet.jsp.el.ImplicitObjectELResolver$ImplicitObjects$7@d9d714

Выглядит хорошо. Чего ты ожидал?

Резюме: я не понимаю вашей проблемы. Пожалуйста, уточните подробнее. Опубликовать SSCCE. Расскажите об ожидаемом вводе/выводе. Расскажите о фактическом вводе/выводе.

Изменить вы отредактировали свой вопрос. Ну, вот обновленные ответы.

${header.columnName}

Ожидаемый: он должен напечатать значение в columnName
Фактический: он вообще ничего не печатает

Тогда он фактически не содержал значения. Чтобы проверить это правильно, переопределите Object#toString() примерно так:

public String toString() {
    return "header[" + columnName + "]";
}

И протестируйте его с помощью ${command.headerList}. Вы также можете добавить некоторый оператор System.out или Logger в метод получения, чтобы увидеть, действительно ли он вызывается и действительно ли возвращает значение. Или, если вы понимаете, как его использовать, просто запустите отладчик кода. Каждая приличная IDE поставляется с ним.

Следующий:

${command.headerList[i]}

Вывод: ничего не отображается.

Тогда нет средств действительного i. Чтобы проверить это правильно, сделайте следующее, чтобы получить первый элемент:

${command.headerList[0]}
person BalusC    schedule 10.11.2009