Как передать bean-компонент в тег JSP в качестве параметра? - PullRequest
1 голос
/ 07 февраля 2012

Я создал пользовательский тег JSP, который должен принимать список продуктов для рендеринга, но у меня возникают проблемы с выяснением того, как передать список тегу. Список продуктов существует в виде bean-объекта в области страницы. Веб-приложение написано на Struts 1.2.x с использованием тега Struts .

.

Вот упрощенная версия моего кода:

renderProducts.tag

<%@ tag language="java" pageEncoding="ISO-8859-1" body-content="empty" %>
<%@ attribute name="products" required="false" type="ProductIf[]" %>
<logic:iterate id="product" name="${products}" type="ProductIf">
    <!-- Render the product -->
</logic:iterate>

ProductDetail.jsp

<bean:define id="relatedProducts" name="productMgr" property="relatedProducts />
<my:renderProducts products="${relatedProducts}" />

Однако, когда я просматриваю страницу, я получаю исключение:

Невозможно преобразовать строку "$ {relatedProducts}" в класс "[Lcom.foo.ProductIf;" для атрибута "products": редактор свойств не зарегистрирован в PropertyEditorManager

Так что, похоже, синтаксис ${} - это не то, что мне нужно делать, так как он все равно интерпретируется как буквальная строка. Я также попытался передать имя бина без ${} с тем же результатом. Какой правильный синтаксис?

(Примечание: пожалуйста, прости меня, если этот вопрос основан на шаткой основе неверных предположений, но я новичок в разработке Java EE, и в настоящее время происходит немало путаницы.)

1 Ответ

1 голос
/ 07 февраля 2012

Чтение http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html:

Чтобы отключить оценку выражений EL, вы указываете Атрибут isELIgnored директивы страницы:

<%@ page isELIgnored ="true|false" %> 

Допустимые значения этого атрибута: true и false. Если это правда, EL выражения игнорируются, когда они появляются в статическом тексте или теге атрибутов. Если оно ложно, выражения EL оцениваются контейнер.

Значение по умолчанию зависит от версии в Интернете. дескриптор развертывания приложения. Режим по умолчанию для страниц JSP доставляется с использованием Servlet 2.3 или более раннего дескриптора игнорировать EL выражения; это обеспечивает обратную совместимость . Режим по умолчанию для страниц JSP, поставляемых с дескриптором Servlet 2.4, необходимо оценить EL выражения; это автоматически обеспечивает по умолчанию, что большинство приложения хотят.

(акцент мой)

Итак, либо переключитесь на сервлет 2.4 или дескриптор higner, если ваш контейнер его поддерживает, либо активируйте EL, используя <%@ page isELIgnored = "false" %>.

...