onchange解决了数量框验证,为什么Enter键被传递?

时间:2011-07-29 20:48:01

标签: jsf ajax4jsf

<h:inputText id="quantity"
value="#{_cartItem.quantity}" required="true" size="3"
maxlength="3">
<f:converter converterId="ValueConverter" />
<f:validateLongRange minimum="0" maximum="999" />
<a:support event="onchange"
    ajaxSingle="true"
    action="#{cSession.userCheckQuantity(_cartItem, index)}"
    reRender="minicartAjax, shoppingCartAjax, orderTotalAjax"></a:support>

当您单击数量输入框时,很容易触发userCheckQuantity方法。但如果我输入一个数字并快速按下键盘上的输入键,则会错过验证。

如何获得Enter键验证方法呢?如果我需要提供更多代码,请告诉我。

1 个答案:

答案 0 :(得分:0)

您正在通过Ajax进行验证。这不够强大。您需要将action="#{cSession.userCheckQuantity(_cartItem, index)}"替换为与<f:validator>绑定到输入组件的完全Validator实现。这样,无论是由更改还是表单提交触发,都将始终进行验证。

Validator实施中,您可以从_cartItem获取indexFacesContext。具体取决于它们的存储位置以及您正在使用的JSF规范版本。如果它们例如存储为请求属性,则可以使用ExternalContext#getRequestMap()来获取它们。