InternalResourceViewResolver
позволяет использовать экспозицию для экспорта компонентов в контексте jsp. Например, если вы хотите, чтобы выставить список фасолью, вы должны настроить вид распознаватель в вас dispatcher-servlet.xml
следующий путь:
...
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
<property name="exposedContextBeanNames">
<list>
<value>someBean</value>
</list>
</property>
</bean>
...
где someBean
это имя бина вы хотели бы экспортировать в контексте JSP. Вы даже можете выставить всех весенних боб:
...
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
<property name="exposeContextBeansAsAttributes" value="true"/>
</bean>
...
Это позволяет получить доступ к весне бобов из Jsp контекста по имени компонента.
Допустим, обработчик вашего тега выглядит следующим образом:
package com.mytags;
public class SomeTag extends SimpleTagSupport {
private SomeBean bean;
@Override
public void doTag() throws JspException, IOException {
getJspContext().getOut().write(bean.doSomething());
}
public SomeBean getBean(){...}
public void setBean(SomeBean bean){...}
}
Затем в TLD тег будет описан следующий способ:
...
<tag>
<name>someTag</name>
<tag-class>com.mytags.SomeTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>bean</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>com.mybeans.SomeBean</type>
</attribute>
</tag>
...
Обратите внимание, что вы должны указать rtexprvalue
как true
, потому что вы передадите bean в тег как выражение EL. Теперь вы можете использовать этот тег в JSP:
<%@ taglib prefix="mytags" uri="http://mytags.com" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title></title>
</head>
<body>
<mytags:someTag bean="${someBean}"/>
</body>
</html>
Но на самом деле это не хорошая идея, чтобы получить доступ к весеннему бобу прямо из обработчика тега непосредственно. Тег должен знать, как показывать данные, но должен быть отвлечен от того, как получить эти данные. Лучше подготовьте все данные, которые вы хотели бы показать в контроллере, и передайте их в качестве модели для jsp.
Благодарим вас за то, что вы нашли такой всеобъемлющий ответ, именно то, что я ищу. – Snickers3192