これは、JSF 変数の正確な「受け渡し」ではありません。これは、JSF 変数を JavaScript 変数/値であるかのように出力しているだけです。ご存じのとおり、JSF と JS はまったく同期して実行されません。JSF は Web サーバーで実行され、HTML/CSS/JS コードを生成し、Web ブラウザーで実行されます。
具体的な問題は、無効な JS 構文を生成するような方法で JSF コードを記述したために発生する可能性が最も高いです。これを確認する簡単な方法は、JSF で生成された HTML 出力を確認することです。これは、右クリックしてブラウザでソースを表示し、ブラウザの JS コンソールに構文エラー レポートが表示されないかどうかを確認することで確認できます。 Chrome/IE9+/Firefox23+ では F12 を押して検索します。
#{entity.key}
ここで想像してみてください
<a onclick="actualizaMenu(#{entity.key})">#{entity.nombre}</a>
のようなJava文字列変数を出力する"foo"
と、生成されたHTMLは次のようになります
<a onclick="actualizaMenu(foo)">some name</a>
しかし、見てください、これはという名前の JavaScript変数foo
を表しており、JS 文字列値ではありません! したがって、実際に最終的に次のようになりたい場合
<a onclick="actualizaMenu('foo')">some name</a>
次に、その HTML を正確に生成するように JSF に指示する必要があります。
<a onclick="actualizaMenu('#{entity.key}')">#{entity.nombre}</a>
ただし、JSF 変数の特殊文字に注意してください。そのためにOmniFacesof:escapeJS()
関数を使用できます。
具体的な問題とは関係なく、の具体的な実装はactualizaMenu()
意味がありません。Bean プロパティを設定しようとしているようです。そのために JS を使用するのではなく、<h:commandLink>
代わりに a.
<h:commandLink value="#{entity.nombre}" action="#{linkedMenu.setKey(entity.key)}" />
必要に応じて a<f:ajax>
をネストして、非同期にします。