JSF 2.0在输入期间禁用inputText

时间:2014-12-28 20:26:05

标签: jsf-2 render

很抱歉,如果这已经得到解答,但我找不到任何完全符合我需要的答案或示例。

我有一个JSF(2.0)页面,其中给用户一个代码(如验证码),并且必须在inputText字段中输入该确切代码。我想在用户正确输入代码后立即禁用(或者甚至更好地隐藏)inputText字段(并且焦点仍然在inputText字段上)。

这有效:

<h:inputText id="code" value="#{myBean.code}">
    <f:ajax event="keyup" render="code" />
</h:inputText>

但是在每个keyup上,inputText字段失去焦点,因此该解决方案是不可接受的。我也试过设置readonly =“true”(使用支持bean布尔值)但是它没有将inputText的readonly属性设置为true,即使它将相应的backing bean的相应布尔值设置为true:

<h:inputText id="code" value="#{myBean.code}" readonly="#{myBean.hasCodeBeenMatched}">
    <f:ajax event="keyup" />
</h:inputText>

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

如果您在每次按键后都能进行客户端 - 服务器通信 - 为什么不采取其他方法:

  1. 添加一个额外的面板id="removingElement",其中包含javascript以隐藏客户端的代码输入

    • 描述了一种检索code-inputText的唯一ID的方法here
  2. 将此面板设为rendered='#{myBean.hasCodeBeenMatched}'

  3. f:ajax电话

    中重新呈现此元素

    <f:ajax event="keyup" execute="@this" render="removingElement" />

  4. 所以,会发生什么:每次按键时,服务器都会检查正确性,但是会重新呈现持有javascript的面板(你不应该忽略焦点)。一旦代码正确,面板就会实际呈现并执行其中的javascript - 隐藏输入文本。

    我很遗憾没有提供任何正常工作的代码,因为我手头没有工作的JSF2环境。无论如何,如果你让它工作,请告诉我。希望它有所帮助...