从Tiles视图(JSP)访问Spring bean

在Spring MVC中,我可以使用JstlView的posedContextBeanNames(或ExposureContextBeansAsAttributes)在JSP中访问我的bean。例如,然后,在我的JSP中,我可以编写($ {properties.myProperty)。但是,当相同的JSP是tile视图的一部分时,将无法访问这些属性。是否可以正确配置Tiles或以其他方式访问这些属性?

我正在使用Spring MVC 3.0.2和Tiles 2.2.1。这是我的一些配置:

<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">

<property name="order" value="1"/>

<property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" />

</bean>

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>

<property name="order" value="2"/>

<property name="prefix" value="/WEB-INF/views/"/>

<property name="suffix" value=".jsp"/>

<property name="exposedContextBeanNames">

<list><value>properties</value></list>

</property>

</bean>

编辑:我已经实现了Skaffman的解决方案。

TilesExposedBeansViewResolver.java:

package es.kcsolutions.util.spring.servlet.view;

import org.springframework.web.servlet.view.*;

public class TilesExposingBeansViewResolver extends UrlBasedViewResolver {

private Boolean exposeContextBeansAsAttributes;

private String[] exposedContextBeanNames;

public void setExposeContextBeansAsAttributes(boolean exposeContextBeansAsAttributes) {

this.exposeContextBeansAsAttributes = exposeContextBeansAsAttributes;

}

public void setExposedContextBeanNames(String[] exposedContextBeanNames) {

this.exposedContextBeanNames = exposedContextBeanNames;

}

@Override

protected AbstractUrlBasedView buildView(String viewName) throws Exception {

AbstractUrlBasedView superView = super.buildView(viewName);

if (superView instanceof TilesExposingBeansView) {

TilesExposingBeansView view = (TilesExposingBeansView) superView;

if (this.exposeContextBeansAsAttributes != null) view.setExposeContextBeansAsAttributes(this.exposeContextBeansAsAttributes);

if (this.exposedContextBeanNames != null) view.setExposedContextBeanNames(this.exposedContextBeanNames);

}

return superView;

}

}

TilesExposedBeansView.java:

package es.kcsolutions.util.spring.servlet.view;

import java.util.*;

import javax.servlet.http.*;

import org.springframework.web.context.support.ContextExposingHttpServletRequest;

import org.springframework.web.servlet.view.tiles2.TilesView;

public class TilesExposingBeansView extends TilesView {

private boolean exposeContextBeansAsAttributes = false;

private Set<String> exposedContextBeanNames;

public void setExposeContextBeansAsAttributes(boolean exposeContextBeansAsAttributes) {

this.exposeContextBeansAsAttributes = exposeContextBeansAsAttributes;

}

public void setExposedContextBeanNames(String[] exposedContextBeanNames) {

this.exposedContextBeanNames = new HashSet<String>(Arrays.asList(exposedContextBeanNames));

}

protected HttpServletRequest getRequestToExpose(HttpServletRequest originalRequest) {

if (this.exposeContextBeansAsAttributes || this.exposedContextBeanNames != null)

return new ContextExposingHttpServletRequest(originalRequest, getWebApplicationContext(), this.exposedContextBeanNames);

return originalRequest;

}

@Override

protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {

HttpServletRequest requestToExpose = getRequestToExpose(request);

exposeModelAsRequestAttributes(model, requestToExpose);

super.renderMergedOutputModel(model, requestToExpose, response);

}

}

Spring配置:

    <bean id="tilesViewResolver" class="es.kcsolutions.util.spring.servlet.view.TilesExposingBeansViewResolver">

<property name="order" value="1"/>

<property name="viewClass" value="es.kcsolutions.util.spring.servlet.view.TilesExposingBeansView"/>

<property name="exposedContextBeanNames">

<list><value>properties</value></list>

</property>

</bean>

如果有问题,请查看TilesExposedBeansView.renderMergedOutputModel。我做了一些测试,但是也许有必要做更多的事情。

回答:

你是否尝试在xml配置文件中使用ServletContextAttributeExporter?

<bean

class="org.springframework.web.context.support.ServletContextAttributeExporter">

<property name="attributes">

<map>

<entry key="<bean key here>">

<ref bean="<bean name here" />

</entry>

</map>

</property>

</bean>

以上是 从Tiles视图(JSP)访问Spring bean 的全部内容, 来源链接: utcz.com/qa/410319.html

回到顶部