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 的一部分。因此,您需要做的就是相应地编写 JSF/EL 代码以生成有效的 HTML/JS 代码。实际上,就像您尝试的那样,使用 EL 在生成的 JavaScript 代码中内联 bean 属性是正确的方法之一。

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

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

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

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

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

于 2012-10-24T13:20:07.200 回答
4

您可以从这里尝试该方法

并将您的 bean 字段保存在:

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

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

于 2012-10-24T13:07:08.083 回答