2011-07-31 116 views
0

我想通过使用struts2瓷砖插件对我的项目进行组件化。 我写的tiles.xml文件是这样的:struts2瓷砖插件存在问题。

<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> 

正如你看到的,我把一些行动网址放入属性值。我认为他们会作为struts动作执行并显示返回的结果视图。但事实是tiles插件将“xxxx.action”识别为文件:java.io.FileNotFoundException:请求的资源(/bookstore/topbar.action)不可用。 那么是否有任何解决方案将动作的结果视图插入到tile布局中?

回答

0

据我所知,你不能从瓷砖定义执行动作。

如果您想在渲染所有其他图块结果之前对此jsp执行一些逻辑,另一个解决方案可能是使用json插件或类似的东西对struts操作使用一些异步jquery调用。

我不确定你的最终目标是什么,如果你能描述你正在拍摄的东西,也许我可以帮到更多。

编辑:在一个JSP

使用条件语句在你的瓷砖定义进一步的定义,你会引用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中,你会立足于一个支柱是什么使标签条件:

<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,或者布尔验证为false,那么它将显示登录表单,否则将显示欢迎消息和注销按钮。

+0

我的页面里有一个顶栏。栏中的信息取决于用户是否登录。如果他还没有登录,登录链接将显示,否则登出链接将显示,并且还显示字符串“welcome”+ userName。我搜索了很长时间,并找到了一种在瓷砖定义中执行动作的方法。只需添加请求 INCLUDE在web.xml内部struts2 filter-mapping标记。它有效,但我不知道为什么。 –

+0

我会建议使用一个标准的jsp与其中的一些struts条件标签在它的测试用户对象的布尔值,也许是isAuthenticated()。我在这里回答了一个登录状态问题的问题:http://stackoverflow.com/questions/6906894/struts-2-session-management-and-dynamically-displaying-jsps/6935182#6935182 –

+0

请参阅我的编辑进一步的说明 –