2012-02-20 25 views
1

我可以在沒有後臺bean的情況下即時獲得inputTextare的值嗎?在沒有後臺bean的情況下即時獲取inputText的值?

<p:dialog> 
<p:inputTextarea rows="5" cols="30" value="#{_var.note}" /> 
<h:outputText id="remaining" value="#{util.getCharactersRemaining("varibale of textarea", 160)} characters left" /> 



public class UtilFacade { 
    public int getCharactersRemaining(String value, int maxLength) { 
     log.info("length: " + value.length()); 
     return (maxLength - value.length()); 
    } 
} 

爲了在對話框中顯示剩餘字符,我要養活在textarea的電流值的方法,而不值保存到後臺bean! 我怎樣才能得到這個值?

+0

你試過'#{util.getCharactersRemaining(_var.note,160)}'嗎? – 2012-02-20 19:20:53

+1

不太確定你想要什麼。如果您想要實時通知,那麼您需要在inputTextArea上放置一個自定義jQuery按鍵處理函數,以在沒有服務器端回發的情況下執行即時驗證。否則,如果你想讓outputText顯示一個驗證消息,那麼你應該在inputTextArea上使用''facet來確保你的輸入不超過最大長度。 – 2012-02-20 19:25:39

回答

4

您可以使用JavaScript方法執行此操作(無需轉至服務器)。下面是一個示例:

<script type="text/javascript"> 
    function getRemainingChars(textArea, maxLength) { 
     var actualText = textArea.value; 
     if (actualText.length > maxLength) { 
      textArea.value = actualText.substring(0, maxLength); 
     } 
     var remainingChars = (maxLength > actualText.length) ? maxLength - actualText.length : 0; 
     document.getElementById("frmMyPage:txtRemainingChars").value = remainingChars; 
    } 
</script> 
<h:form id="frmMyPage"> 
<h:inputTextArea id="txtTextArea" cols="50" rows="10" onkeyup="getRemainingChars(this, 500);" /> 
<br /> 
<h:outputText id="txtRemainingChars" /> 
</h:form> 

你可以得到約​​,keypresskeyup詳情JavaScript函數here(在這種情況下,我preffer驗證的keyup事件文本)。您也可以修改JavaScript函數併發送組件的ID,而不是發送整個組件(這將使得JS可用於inputText組件和類似器)。

+1

+1,但我認爲這行對於OP來說不起作用'document.getcomponentById(「frmMyPage:txtRemainingChars」)'儘管'document'中沒有這個函數,使用JSF值'_var'暗示它位於'c:forEach'或'ui:repeat'組件中,在這種情況下,可能找不到id:frmMyPage:txtRemainingChars。 – 2012-02-20 19:29:11

+1

@maple:在轉發器組件中有一個對話框也是非常值得懷疑的設計。 – BalusC 2012-02-20 19:30:52

+0

@maple_shaft謝謝你是對的,已經編輯:)。 – 2012-02-20 19:31:11

相關問題