You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSF Primefaces:如何在focus事件触发时修改输入框的值

问题根因
  • <p:ajax>默认未指定更新目标,后端修改folioExam属性后不会自动同步到前端输入框
  • 仅触发监听器执行后端逻辑不会自动触发前端组件重渲染,必须显式指定需要更新的组件
修复方案

方案1:添加update属性(优先推荐)

在<p:ajax>标签中新增update属性,指定要更新的输入框id即可,修改后的前端代码如下:

<dcisc:textfield id="folioExam" autocomplete="off" value="#{customerInfo.folioExam}" editable="true" mandatory="NON_MANDATORY">
    <p:ajax event="inputFocus" listener="#{customerInfo.unMaskFolioExam}" update="folioExam" />
</dcisc:textfield>

该方案逻辑最轻量,ajax请求完成后会自动刷新对应组件,同步后端最新值到输入框。

方案2:后端手动触发组件更新

如果自定义组件对update属性兼容不好,可以在后端监听器中手动调用API触发组件更新,代码如下:

// 引入对应包:PrimeFaces 6.x及以下用org.primefaces.context.RequestContext,10.x及以上用org.primefaces.PrimeFaces
public void unMaskFolioExam(){
     // 原有解密/处理逻辑
    folioExam = unmaskedValue;
    // PrimeFaces 10+写法
    PrimeFaces.current().ajax().update("folioExam");
    // 低版本写法
    // RequestContext.getCurrentInstance().update("folioExam");
}
异常排查

如果修改后仍未生效,可按以下顺序排查:

  • 确认组件事件命名是否正确,部分组件的焦点事件命名为focus而非inputFocus,可替换event属性值测试
  • 确认customerInfo类中folioExam属性存在完整的get、set方法
  • 确认你使用的PrimeFaces版本和自定义组件的ajax事件支持规则

内容的提问来源于stack exchange,提问作者Luis Enrique

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 12:48:01