2011-12-22 21 views
0

これを動作させようとしていますが、パラメータIHeaderResponseの応答が呼び出し側の親ページのリンクをそれぞれ非表示にするためにrenderHeadメソッドを使用しています。 これは、Apache Tomcatサーバー経由で提供されるモバイルWebアプリケーションの一部です。親ページのidでJQueryを表示/非表示にする

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 
"}"); 

しかし、(これを見て、これを見た?)、

行 "親。$( '#ログアウト')。show();"と "parent。$( '#login')。hide();"

ブラウザで(PC経由で)想定されていることを実行すると、ログアウトリンクが有効になり、ログインリンクは非表示になります(ユーザーがログインしている場合)。

しかしリンクは彼らがすることになっているように隠され/示されていないれ、Androidの携帯電話を経由してこれを行う一方で、ログインリンクがまだそこに座っています。私がログインしていないかのように、ログには私がログインしていることが表示されますが、

この場合、定数「redirectUrl」ポイントはStartPage.htmlに戻ります。

ところで、私は古いスタイルのjsも使用しようとしました。 "parent.document.getElementById( 'logout')。style.display = 'ブロック';"、無駄になります。

ありがとうございます。

//カレ

答えて

1

これはしばらくお待ちしていますが、ここで私は最終的に私のために動かすために何をしたのですか?この時点でjbrookover彼の素早い答えです 解決策は、しかし、より "古いもの"に判明しました。

JQueryMobileを使用する場合、ページをロードするコストを削減するために、ページはキャッシュに格納されます。 これは、1つのスタートもキャッシュに保存されているページから、Android携帯にさまざまなリンクがレンダリングされる方法を保存することを意味し、解決策は旧式のHTMLを利用していました。スタートページのheadセクションに次のように組み込むことにより 、

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

0

Wicketのは、あなたがAjaxで複雑な何かをやっている場合は特に、あなたの要素IDを書き換えるために自由に利用可能です。ただし、このような場合に使用するために、これらのIDを利用できるようにします。あなたがlogoutLink変数を置く必要があるでしょう、

"parent.$('#" + logoutLink.getMarkupId() + "').show();" 

を明らかに:あなたはJavaScriptをレンダリングする際に

その後
Link logoutLink = new Link("logoutlink"); 
logoutLink.setOutputMarkupId(true); // Explicitly create the ID attribute 
add(logoutLink); 

、このように見えるように、その行を調整します。ここでは、JavaコードになりますスコープはrenderHeadメソッドにアクセス可能です。

レンダリングされたコードを見ることで、これが実際に問題であることが確認できます。 IDはおそらく "logout"から "logoutlink12"のようなものに変更されました

+0

こんにちは!あなたが提案したように、「logoutlink」の代わりに「logoutlink12」)のように、logoutLinkがレンダリングされているかどうかわからないので、申し訳ありません。レンダリングを表示する方法の問題です問題のアプリを実行しているAndroid端末のhtml。親ページに渡されたもの(親ページのログアウト/ログインタグを操作するもの)を正しく表示するために、レンダリングされたhtmlを取得する方法を見つける必要があります。 Androidの携帯電話でレンダリングされたhtmlを表示する方法については、親切に評価されています。 // Kalle – Learning

+0

私はいくつかの方法があると確信しています(私はAndroidで作業していないのですぐにわかりません)。ただし、JavaScriptの条件を変更して、マークアップを確認するために、そのページを通常のブラウザに一時的にレンダリングするだけでも可能です。それにもかかわらず、私のポイントはまだ立っています。あなたのマークアップIDがwicketによって変更されており、 '$( '#logout')'とみなすことはできません。 'logoutLink.getMarkupId()'を使うことは、javascriptを使って作業するときの一般的な振る舞いです。 – jbrookover

関連する問題