如何关闭InputTextArea的Ajax自动更新及解决其验证错误问题
针对你的PrimeFaces InputTextArea问题的解决方案
1. 如何关闭InputTextArea的Ajax自动更新?
PrimeFaces的InputTextArea默认会在keyup(输入时)、blur(失去焦点)这类事件触发Ajax请求,用来实时更新计数器或者执行验证。如果要关掉这些自动触发的Ajax行为,你可以按以下方式处理:
- 禁用所有默认Ajax事件:在InputTextArea内部添加
<p:ajax disabled="true" />,这样能直接禁用组件上所有默认绑定的Ajax事件:
<p:inputTextarea id="alasanajax" cols="40" rows="5" required="true" counter="display" maxlength="200" autoResize="false" counterTemplate="{0} karakter tersisa" value="#{ownershipBacking.own.inactiveReason}" requiredMessage="#{MsgBundle.required_inactive_reason}"> <p:ajax disabled="true" /> </p:inputTextarea>
- 针对性禁用特定事件:如果你只想关掉某一个触发Ajax的事件(比如实时输入时的
keyup),可以单独禁用该事件:
<p:inputTextarea id="alasanajax" ...> <p:ajax event="keyup" disabled="true" /> <!-- 要是还想关闭失去焦点时的Ajax请求,就再加下面这行 --> <!-- <p:ajax event="blur" disabled="true" /> --> </p:inputTextarea>
- 关闭计数器的Ajax更新:如果只是因为计数器(counter)导致的Ajax请求,其实PrimeFaces的计数器默认支持客户端计算,只要页面正常引入了PrimeFaces的客户端脚本,计数器就会在本地计算,不需要发Ajax请求。
2. InputTextArea验证错误信息异常的解决
从你给出的代码片段来看,我整理了几个可能导致异常的原因和对应解决办法:
(1)补全EL表达式
你的requiredMessage属性写了#{MsgBund...,这明显是不完整的,会导致EL解析错误,没法正确显示错误信息。你需要补全消息束的键名,比如:
requiredMessage="#{MsgBundle.required_inactive_reason}"
这里MsgBundle是你配置的消息束名称,required_inactive_reason是对应的消息键值。
(2)添加对应的消息展示组件
验证错误信息需要通过p:message或p:messages组件来展示,你得在InputTextArea附近添加一个关联的p:message:
<h:panelGrid columns="1" rendered="#{ownershipBacking.own.fgOwnershipStatus =='Tidak Aktif'}"> <p:outputLabel value="Alasan *" for="alasanajax"></p:outputLabel> <p:inputTextarea id="alasanajax" ...> <!-- 保留你的组件属性和配置 --> </p:inputTextarea> <!-- 添加这个消息组件,关联到InputTextArea的ID --> <p:message for="alasanajax" styleClass="error-message" display="text" /> </h:panelGrid>
(3)确保Ajax提交时更新消息组件
如果是用Ajax按钮提交表单,要确保按钮的update属性包含消息组件的ID(或者直接用@form更新整个表单),这样验证错误信息才能被正确渲染出来:
<p:commandButton value="Submit" action="#{ownershipBacking.save}" update="@form" process="@form" />
(4)移除重复的验证规则
你同时设置了required="true"和minLength="1",这两个规则功能重复(都是确保输入不为空),建议删掉minLength="1",避免潜在的验证冲突。
内容的提问来源于stack exchange,提问作者Agus Tinus
相关产品推荐
相关产品推荐

