3

JSFでバッキングBeanの値を読み取ってからJavaScriptに渡したいのですが、これを行う方法を知っていますか?

バッキングBeanのサンプルコード:

@ManagedBean(name="enquiry")
@SessionScoped
public class Enquiry {

  public boolean noQuery;

  /** getter and setter **/
}

XHTMLサンプルコードでは、バッキングBeanの値を渡してから、次のshowNoQueryPrompt()ように渡します。

<h:commandLink onClick="showNoQueryPrompt(#{enquiry.noQuery})">
</h:commandLink>

次に、JavaScriptコードで、ブール値を読み取って、プロンプトを表示するかどうかを判断できます。コードは次のとおりです。

<script ...>
   var showNoQueryPrompt(Boolean showPrompt) {

     if( showPrompt == "true" ) {
        alert('No query');
     }
   }
</script>
4

2 に答える 2

7

つまり、JSFはHTMLコードを生成するだけであり、JSはHTMLの一部であることを理解する必要があります。したがって、必要なのは、有効なHTML/JSコードを生成するようにJSF/ELコードを記述することだけです。実際、ELを使用して、試行のように生成されたJavaScriptコードのBeanプロパティをインライン化することは、正しい方法の1つです。

これが実際に実際のコードであると仮定すると、しかし、いくつかの構文ミスを犯しました。onClick属性が無効です。すべて小文字にする必要があります。そうしないと、JSFは属性をまったくレンダリングしません。

<h:commandLink value="link" onclick="showNoQueryPrompt(#{enquiry.noQuery})" />

JavaScriptには強い型付けの概念がありません。関数の引数のBoolean型が無効です。それを除く。そうしないと、(ブラウザのJSコンソールで)JS構文エラーが発生します。

function showNoQueryPrompt(showPrompt) {
   if (showPrompt) {
      alert('No query');
   }
}

これはコマンドリンク自体が呼び出される前に実行されることを理解していることを期待していることに注意してくださいaction(これで理解できたはずです。JSFはHTMLを生成します。ブラウザでページを右クリックし、ソースを表示して自分で表示します)。しかし、あなたは具体的な質問でそれをカバーしていなかったので(さらに、質問で与えられたコードの具体的な問題をまったく説明しなかった)、それについて詳細な答えを与えることはできません。

于 2012-10-24T13:20:07.200 に答える
4

ここからアプローチを試すことができます

Beanフィールドを次の場所に保存します。

<h:inputHidden id="hidden2" value="#{enquiry.noQuery}" />

次に、このフィールドの値を使用してメソッドを呼び出します。

于 2012-10-24T13:07:08.083 に答える