2012-10-24 83 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}" /> 

然後使用這個字段的值調用你的方法。