在没有支持bean的情况下即时获取inputText的值?

时间:2012-02-20 19:06:52

标签: java html jsf

我可以在没有支持bean的情况下动态获取inputTextare的值吗?

<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! 我怎样才能得到这个值?

1 个答案:

答案 0 :(得分: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>

您可以获得有关keydownkeypresskeyup javascript函数here的更多详细信息(在这种情况下,我不得不验证keyup事件上的文本)。您还可以修改JavaScript函数并发送组件的id,而不是发送整个组件(这将使JS可用于inputText组件和类似物)。