2013-02-05 14 views

答えて

20

これはJSF変数の正確 "通過" ではありません。このような

何か。これはJSF変数をJavaScript変数/値のように出力しているだけです。 JSFとJSは全く同期して動作しません。 JSFはWebサーバーで動作し、HTML/CSS/JSコードを生成します.HTML/CSS/JSコードは、一度そこに着いたらWebブラウザで実行されます。

具体的な問題は、無効なJS構文を生成するような方法でJSFコードを記述したために発生している可能性があります。それを確認する簡単な方法は、JSFで生成されたHTML出力を右クリックして確認することです(ソース表示)。ブラウザでJSコンソールに構文エラーレポートが表示されていないかどうかをチェックするChrome/IE9 +/Firefox23 +でF12キーを押すと見つかります。

というJavaScript 変数を表す、ここ

<a onclick="actualizaMenu(#{entity.key})">#{entity.nombre}</a> 

#{entity.key}"foo"のようなJavaの文字列変数を印刷し、その後、生成されたHTMLが

<a onclick="actualizaMenu(foo)">some name</a> 

のようになります。でもねえ、見ていることを想像してみてfoo、JS文字列値ではありません!あなたが実際に最終的に

<a onclick="actualizaMenu('foo')">some name</a> 

として終わるしたいのであれば、あなたは正確にHTMLを生成するために、JSFに指示する必要があります

<a onclick="actualizaMenu('#{entity.key}')">#{entity.nombre}</a> 

しかしJSF変数に特殊文字に注意してください。これにはOmniFaces of:escapeJS() functionを使用できます。具体的な問題へ


無関係actualizaMenu()の具体的な実装では意味がありません。 Beanプロパティを設定しようとしているようです。あなたはJSを使ってはいけませんが、代わりに<h:commandLink>です。

<h:commandLink value="#{entity.nombre}" action="#{linkedMenu.setKey(entity.key)}" /> 

ネストした場合、必要に応じて<f:ajax>を非同期にします。

1

私は(あなたがjQueryのを使用すると仮定すると)同じ結果を得るための要素にjQueryとデータ属性との結合事象を使用することをお勧めします:

<script> 
    function actualizaMenu(key){ 
    /* Logic here ... */ 
    } 

    $(document).ready(function(){ 
    $('.menuItem').click(function(){ 
     var key = $(this).data('key'); 
     actualizaMenu(key); 
    ); 
    }); 
</script> 

...

<ul> 
    <ui:repeat value="#{moduleList.modulos}" var="entity"> 
    <li> 
     <a data-key="#{entity.key}" class="menuItem">#{entity.nombre}</a> 
    </li> 
    </ui:repeat> 
</ul> 

そして、として#{linkedMenu.setKey(key)}が実際にjavascriptを返さない限り(これはほとんど起こりそうもなく、おそらく本当に悪いことかもしれません)、関数を修正する必要があります。

1

私はこの質問が古いことを知っていますが、まだ見ている人にはもう一つの選択肢があります。

プライムフェイスを使用している場合は、これを試してみてください。 Request Context

関連する問題