2012-10-24 38 views
2

我想阅读JSF中的backing bean值,然后将其传递给JavaScript,我可以知道如何做到这一点吗?如何将支持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

只是将其放入隐藏的输入 – Daniel

回答

7

至此,您需要了解JSF仅生成HTML代码,并且JS是HTML的一部分。所以你所要做的就是编写相应的JSF/EL代码,生成有效的HTML/JS代码。事实上,使用EL在生成的JavaScript代码中内联bean属性就像在你的尝试中一样,是正确的方法之一。

假设这确实是real代码,但是您犯了一些语法错误。 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,在浏览器和查看源代码右击页面给自己看看吧)。但是你没有在你的具体问题中涉及到这个问题(甚至更多,你没有用问题中的给定代码来描述具体问题),所以我无法给出详细的答案。

+0

这太糟糕了,我需要'enquiry.noQuery'来在提示警报之前更新1st。 – huahsin68

+0

正如答案所述,您从未在问题中明确具体的功能要求,所以我无法详细回答。但是,无论你想要的是绝对可能的。 – BalusC

+0

感谢您的评论,我将提出另一个问题,因为我不想用扩展答案来污染问题。 – huahsin68

4

你可以尝试从here

的方法,并保存在您的bean字段:

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

然后使用这个字段的值调用你的方法。