我试图让这个工作,在Wicket renderHead方法中,参数IHeaderResponse响应传递一个javascript,分别显示隐藏调用父页面中的链接。 这是通过Apache Tomcat服务器提供的移动Web应用程序的一部分。
StartPage.html,(调用父页面,隐藏/显示链接的位置)
<li class="ui-block-e">
<a wicket:id="logoutlink" id="logout" href="#" data-theme="a" class="ui-btn-corner- all ui-btn ui-btn-up-a ui-btn-icon-top">
<span class="ui-btn-inner ui-btn-corner-all">
<span class="ui-btn-text">Logga ut</span>
<span class="ui-icon ui-icon-custom"></span>
</span>
<a wicket:id="loginlink" id="login" href="/domain/mobile/login" data-theme="a" class="ui-btn-corner-all ui-btn ui-btn-up-a ui-btn-icon-top">
<span class="ui-btn-inner ui-btn-corner-all">
<span class="ui-btn-text">Logga in</span>
<span class="ui-icon ui-icon-custom"></span>
</span>
</a>
</li>
LoginRedirectPage.java,(包含重定向js的页面)
@Override
public void renderHead(IHeaderResponse response) {
log.info("Redirecting to " + redirectUrl);//to check via log
// if the parent is the mobile app..
response.renderOnDomReadyJavascript(
"if(parent && parent.$ && parent.$.mobile){" +
"parent.$('#logout').show();" +
"parent.$('#login').hide();" +
"parent.history.go(-2);" +
"console.log('redirecting with jqm "+redirectUrl+"');" +//logging
"}");
然而,(见过这个来吧!?),
行&#34; parent。$(&#39;#logout&#39;)。show();&#34;和#34; parent。$(&#39;#login&#39;)。hide();&#34;
在浏览器中(通过PC)执行它们应该执行的操作,启用注销链接并隐藏登录链接(如果用户已登录)。
但是在通过Android手机执行此操作时,链接不显示/隐藏,因为它们应该是,登录链接仍然在那里。好像我没有登录,虽然日志显示我已登录。
常量&#34; redirectUrl&#34;在这种情况下,请回到StartPage.html。
顺便说一句,我也试过使用一些旧式的js,例如。 &#34; parent.document.getElementById(&#39; logout&#39;)。style.display =&#39; block&#39;;&#34;,无效。
提前致谢。
//卡勒
答案 0 :(得分:1)
好的,已经有一段时间了,但这是我最终为我的工作做的事情,此时我要感谢jbrookover的快速回答。 然而,解决方案被证明是一个更“老旧”的解决方案。
在使用JQueryMobile的情况下,页面存储在缓存中,以降低加载页面的成本。 这意味着从一开始的页面也存储在缓存中,从而存储在Android手机中呈现不同链接的方式,并且该解决方案利用了旧的HTML。 通过在起始页的头部分中包含以下内容,
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Cache-control" content="no-cache" />
<meta http-equiv="Expires" content="0" />
这个页面从未存储在JQueryMobile的缓存和javscript代码中,
@Override
public void renderHead(IHeaderResponse response) {
log.info("Redirecting to " + redirectUrl);//to check via log
// if the parent is the mobile app..
response.renderOnDomReadyJavascript(
"if(parent && parent.$ && parent.$.mobile){" +
"parent.$('#logout').show();" +
"parent.$('#login').hide();" +
"parent.history.go(-2);" +
"console.log('redirecting with jqm "+redirectUrl+"');" +//logging
"}");
实际上正在生效。
希望这可能会在某些时候用于其他有JQueryMobile缓存问题的人。
的Sinc。
答案 1 :(得分:0)
Wicket可以自由地重写你的元素ID,特别是如果你正在做任何复杂的Ajax。但是,它使这些ID可用于此类事件。这将是你的java代码:
Link logoutLink = new Link("logoutlink");
logoutLink.setOutputMarkupId(true); // Explicitly create the ID attribute
add(logoutLink);
然后,当您渲染javascript时,请将该行调整为如下所示:
"parent.$('#" + logoutLink.getMarkupId() + "').show();"
显然,您必须将logoutLink
变量放在renderHead
方法可访问的范围内。
您可以通过查看已渲染的代码来确认这确实是问题。该ID可能已从“注销”更改为“logoutlink12”