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

时间:2012-10-24 13:00:14

标签: javascript jsf-2 xhtml managed-bean

我想在JSF中读取backing 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>

2 个答案:

答案 0 :(得分:7)

到目前为止,您需要了解JSF仅生成HTML代码,而JS是HTML的一部分。所以你需要做的就是相应地编写JSF / EL代码,它生成有效的HTML / JS代码。实际上,在生成的JavaScript代码中使用EL来内联bean属性就像在尝试中一样,这是正确的方法之一。

假设这确实是真正的代码,但是你犯了一些语法错误。 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;在浏览器中右键单击页面并查看来源自己查看)。但是你没有在你的具体问题中讨论这个问题(更多的是,你根本没有用问题中的给定代码描述具体问题),所以我不能就此给出详细的答案。

答案 1 :(得分:4)

您可以尝试here

的方法

并将您的bean字段保存在:

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

然后,使用此字段的值调用您的方法。