我所有的链接都通过一个查找参数 menuId 的操作(当然是必须显示的菜单的 ID)。
通过此操作,在返回响应之前,我设置了一个要调用的 javascript 函数:
setBackMenuId(menuId,sometext)
MenuId 是 id,sometext 是该菜单的名称,因此浏览器日志记录更好。
function setBackMenuId(id,subtekst) {
window.location.hash = "menuId="+id;
document.title = subtekst;
selectedHash = document.location.hash;
if(intervalHashSearch == '') {
initializeHashSearch();
}
}
然后,其他需要的js函数:
function publishLinkTarget() {
var param = window.location.hash;
if(param) {
if(param.indexOf("menuId") > 0) {
var id = param.split("=", 2);
if(id[1]) {
setCookie('backMenuId',id[1],1,false);
setTimeout('publishLayoutContent()', 100);
}
}
}
}
var selectedHash = '';
var intervalHashSearch = '';
function initializeHashSearch() {
intervalHashSearch = window.setInterval('checkHash()', 500);
}
function stopHashSearch() {
window.clearInterval(intervalHashSearch);
intervalHashSearch = '';
}
function checkHash() {
var currentHash = document.location.hash;
if(selectedHash != currentHash) {
selectedHash = currentHash;
publishLinkTarget();
}
}
function publishLayoutContent() {
dojo.event.topic.publish("layoutContentTarget");
}
如果你看你会发现,它首先被称为'setBackMenuId',它向地址栏添加哈希和参数并更改标题,然后记住这个哈希,因此间隔哈希搜索可以找出差异。然后它初始化这个哈希搜索。
'checkHash' 每 500 毫秒运行一次,并检查哈希是否已更改(这意味着,按下后退按钮,而不是单击新链接(setBackMenuId 设置 selectedHash)。如果为真(按下后退/前进按钮) ) 函数 'publishLinkTarget' 被调用,它从哈希中读取参数,如果它们没问题,首先我设置一个 cookie,所以我可以从 HttpServletRequest 中读取它并找出哪个菜单 id 链接。如果我在这里意味着我还必须发布使用“publishLayoutContent”制作的内容。
在action类中(这里是MenuAction,方法视图,和发布的一样)只有这个很重要:
Integer menuId = null;
if(request.getParameter("menuId") != null) {
menuId = Integer.valueOf(request.getParameter("menuId"));
} else {
menuId = getIntCookie("hiddenMenuId");
}
所以,如果我没有从参数(点击链接)中获取菜单 ID,我会从 cookie(后退/前进按钮)中获取。
和带有这个目标的 JSP:
<s:url var="layoutContentUrl" action="Menu-view" namespace="/public" />
<sx:div showLoadingText="false" indicator="ajaxIndicator"
id="layout-content" href="%{layoutContentUrl}" theme="ajax"
listenTopics="layoutContentTarget" preload="false"
afterNotifyTopics="/ajaxAfter">
</sx:div>
注意:这是一种特殊情况,如果您通过一个参数连接所有内容,但可以使用发布其他目标的其他参数轻松扩展它。我会尽量让它足够通用以在某个地方发布它,但这(我猜)还有很长的路要走:)
如果您有任何问题,请发布。