如何从Struts Tiles中检索bean并在JSP中使用

时间:2014-02-28 18:20:18

标签: jsp struts tiles

我们在旧版Web应用程序中使用Struts Tiles 1.x.在a.jsp中,我们执行:

<tiles:put name="bean" beanName="change"></tiles:put>

稍后,b.jsp引用a.jsp。在b.jsp中,我们目前有一个scriptlet,我们在其中执行:

<% DomainObject domObject = (DomainObject) TilesHelper.getAttribute("bean", pageContext); %>

这就是getAttribute(String,PageContext)的样子:

public class TilesHelper {
    public static Object getAttribute(String name, PageContext pageContext) throws JspException {
        ComponentContext compContext = (ComponentContext) pageContext.getAttribute(
                ComponentConstants.COMPONENT_CONTEXT, PageContext.REQUEST_SCOPE);

        if (compContext == null) {
            throw new JspException("Error - tag.getAttribute : component context is not defined. Check tag syntax");
        }

        return compContext.getAttribute(name);
    }

这样可行,但我不喜欢scriptlet。 Scriptlet很难看。我不希望这个JSP中有任何scriptlet。我想使用标签来访问请求范围中传递的对象。我试过了

<bean:define id="domObject" name="bean" scope="request"/>

这失败,错误无法在范围请求中找到bean bean。

如何在<tiles:put><bean:define>等标记中访问<jsp:useBean>来电中传递的对象?

由于

1 个答案:

答案 0 :(得分:0)

如果这有助于以后的任何人: 经过大量关注论坛浏览和重新阅读documentation后,我能够破译使用的正确标签

<tiles:useAttribute id="beanId" name="beanNameHere" classname="theBeanClass" scope="request"/>

这在范围请求中声明了一个Java变量,然后可以像任何其他bean一样访问它,在我的例子中使用EL,例如:

<c:if test="${beanId.class.simpleName == 'someInterestingClass'}">
    <c:out value="${beanId.someInterestingProperty}"/> 
</c:if>