我希望使用struts2 tiles插件对我的项目进行组件化。 我写的tiles.xml文件是这样的:
<tiles-definitions>
<definition name="indexBaseLayout" template="/indexBaseLayout.jsp">
<put-attribute name="title" value="" />
<put-attribute name="topBar" value="/topbar.action" />
<put-attribute name="catalog" value="" />
<put-attribute name="searchForm" value="" />
<put-attribute name="main" value="" />
<put-attribute name="footer" value="" />
</definition>
<definition name="regInput.tiles" extends="indexBaseLayout">
<put-attribute name="title" value="注册" />
<put-attribute name="main" value="/reg/input.action" />
</definition>
<definition name="regSuccess.tiles" extends="indexBaseLayout">
<put-attribute name="title" value="注册" />
<put-attribute name="main" value="/reg_success.jsp" />
</definition>
<definition name="index.tiles" extends="indexBaseLayout">
<put-attribute name="title" value="主页" />
<put-attribute name="main" value="/index.jsp" />
</definition>
这是struts.xml的一部分:
<package name="main" extends="struts-default" namespace="/">
<action name="topbar" class="topBarAction">
<result name="success">/topbar.jsp</result>
</action>
</package>
如您所见,我在put-attribute值中添加了一些操作URL。我以为它们将作为struts动作执行并显示返回的结果视图。但事实是,tiles插件将“xxxx.action”识别为文件:java.io.FileNotFoundException:请求的资源(/bookstore/topbar.action)不可用。 那么有什么解决方案可以将动作的结果视图插入到tile布局中吗?
答案 0 :(得分:0)
据我所知,您无法从图块定义执行操作。
如果您在渲染所有其他tile结果之前尝试在此jsp上执行某些逻辑,则另一种解决方案可能是使用json插件或类似的东西对struts操作使用一些异步jquery调用。
我不确定你的最终目标是什么,如果你可以描述你的目标,或许我可以帮助更多。
编辑:在JSP中使用条件的进一步定义
在tile定义中,您将正常引用JSP:
<definition name="indexBaseLayout" template="/indexBaseLayout.jsp">
<put-attribute name="title" value="" />
<put-attribute name="topBar" value="/topbar.jsp" />
<put-attribute name="catalog" value="" />
<put-attribute name="searchForm" value="" />
<put-attribute name="main" value="" />
<put-attribute name="footer" value="" />
</definition>
在JSP中,您将基于条件的struts标记呈现什么:
<s:if test="%{#session.user != null && #session.user.Authenticated"}>
Welcome <s:property value="%{#session.user.name}" />
</s:if><s:else>
<%-- Login form goes here --%>
</s:else>
此解决方案为您提供了一种在会话中检查用户对象的方法,这是我可能会亲自维护用户信息对象的地方。如果用户对象为null或boolean authenticated为false,则它将显示登录表单,否则它将显示欢迎消息,也可能显示注销按钮。