2013-01-10 45 views
0

我有一个标题,菜单和一个正文来加载jsps。当我每次点击菜单元素时,整个瓷砖都会重新加载。但我想向用户显示选定的菜单项。由于瓷砖重新加载,我无法获得用户点击的元素。请让我解决这个问题。谢谢JSP中的Tiles内通信

<definition name="main-tiles" template="/WEB-INF/jsp/menu/home.jsp"> 
    <put-attribute name="header" value="/WEB-INF/jsp/menu/header.jsp" /> 
    <put-attribute name="menu" value="/WEB-INF/jsp/menu/menu.jsp" /> 
    <put-attribute name="body" value="" />  
    </definition> 

    <definition name="home" extends="main-tiles"> 
    <put-attribute name="body" value="" /> 
    </definition> 


    <!-- User Tiles --> 
    <definition name="newUser" extends="main-tiles"> 
    <put-attribute name="body" value="/WEB-INF/jsp/userandorg/user/newUser.jsp" /> 
    </definition> 

回答

2

瓷砖之间并不真正“互相沟通”。

当在浏览器中完全呈现拼贴页面时,请查看html(查看源代码),并且应该很难看到显示的任何拼贴框架。这意味着当你的用户点击一个菜单时,它是返回到你的服务器的往返通信,它通过你的servlet代码运行,然后使用tiles框架来组成结果html。

您所描述的所需行为更类似于framesetiframe行为,其中浏览器窗格的不同部分是字面上不同的请求/响应。您可以使用AJAX框架实现相同的效果,该框架可以调用您的servlet,然后动态更新您的html的特定块(通常定义为divspan元素),而无需刷新整个页面。

但是,如果你想只用你的瓷砖组成彰显点击菜单,有你的servlet标识被单击菜单,然后使用您引入了menu.jsp页面上的一些JSTL识别菜单项的链接,并提供一些CSS造型到菜单链接。它仍然是往返(非AJAX)沟通,但它应该给你你描述的效果。

+0

嗨,感谢您的建议。但是,我的jsp可以与menu.jsp通信以突出显示选定的值吗?既然这两个jsps都在home.jsp中呈现 – SDC

+1

号。home.jsp是您的模板,但menu.jsp实际上是一个单独的jsp。当用户点击一个菜单链接并将请求发送到你的servlet时,servlet应该知道哪个菜单被点击了,就像_Show Foo_和_Show Bar_之间的区别,对吧?该servlet会因请求中的特定“URL”或者可能由一个“查询参数”而知道。当servlet完成其操作时,它可以在请求中为你的menu.jsp找到一个'attribute',或者menu.jsp可以使用现有的'parameter',然后使用'if'语句来设置点击链接的东西特别。 – majorbanzai