我们在旧版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>
来电中传递的对象?
由于
答案 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>