如何将支持bean值传递给JavaScript?

hua*_*n68 2 javascript xhtml jsf-2 managed-bean

我想在JSF中读取backing bean值,然后传递给JavaScript,我可以知道如何做到这一点吗?

支持bean示例代码:

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

  public boolean noQuery;

  /** getter and setter **/
}
Run Code Online (Sandbox Code Playgroud)

在XHTML示例代码中,我想传递支持bean值,然后传递到showNoQueryPrompt()这样:

<h:commandLink onClick="showNoQueryPrompt(#{enquiry.noQuery})">
</h:commandLink>
Run Code Online (Sandbox Code Playgroud)

然后在JavaScript代码中,我可以读取布尔值来确定是否应该提示或不提示.这是代码:

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

     if( showPrompt == "true" ) {
        alert('No query');
     }
   }
</script>
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 7

至关重要的是,您需要了解JSF仅生成HTML代码,而JS是HTML的一部分.因此,您需要做的就是相应地编写JSF/EL代码,以生成有效的HTML/JS代码.实际上,使用EL在生成的JavaScript代码中内联bean属性就像在尝试中一样,这是正确的方法之一.

假设这确实是真正的代码,你却犯了一些语法错误.该onClick属性无效.它必须全部小写.否则JSF根本不会呈现该属性.

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

JavaScript没有强类型的概念.Boolean函数参数中的类型无效.去掉它.否则你将面临一个很好的JS语法错误(在浏览器的JS控制台中).

function showNoQueryPrompt(showPrompt) {
   if (showPrompt) {
      alert('No query');
   }
}
Run Code Online (Sandbox Code Playgroud)

请注意,我希望您了解这是在调用commandlink自己之前运行的action(您现在应该已经理解; JSF生成HTML;在浏览器中右键单击页面并在View Source中查看它自己).但是你没有在你的具体问题中讨论这个问题(更多的是,你根本没有描述问题中给定代码的具体问题),所以我不能给出详细的答案.