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

如何在UI Page(Jelly)的g:evaluate中访问输入框动态数据?

问题分析与解决方案

核心问题本质

g:evaluate是在页面服务器端渲染阶段执行的Jelly代码,页面加载完成后就不会再次运行,所以它根本无法获取用户在客户端输入框中实时输入的内容——你之前尝试的${input_field_value}只能拿到页面渲染时该字段的初始值(也就是空值),后续输入框内容变化不会触发g:evaluate重新执行。

正确实现方案:GlideAjax调用Script Include

你考虑的GlideAjax方案是可行的,这是ServiceNow中客户端触发服务器端逻辑的标准方式,具体实现步骤如下:


1. 创建服务器端验证的Script Include

创建一个可被客户端调用的Script Include,编写字段验证逻辑:

var InputFieldValidator = Class.create();
InputFieldValidator.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    validateInput: function() {
        // 获取客户端传入的输入值
        var inputValue = this.getParameter('sysparm_input_value');
        
        // 这里编写你的验证逻辑,比如格式校验、重复检查等
        var isValid = true;
        if (!inputValue || inputValue.length < 3) {
            isValid = false;
        }
        // 根据验证结果返回对应信息
        return isValid ? "输入合法" : "输入长度不能少于3位";
    },
    type: 'InputFieldValidator'
});

2. 修改UI Page的HTML/Jelly代码

保留输入框,移除无效的g:evaluate代码:

<g:cs_ui_text_field class="p" name="input_field_value" id="input_field_value" value="" onchange="validateRequest();" />
<!-- 保留你的自定义输入框宏,无需额外Jelly服务器端代码 -->

3. 修改客户端脚本,通过GlideAjax调用验证逻辑

function validateRequest() {
    // 获取输入框的实时值
    var inputVal = document.getElementById('input_field_value').value;
    
    // 初始化GlideAjax对象
    var ga = new GlideAjax('InputFieldValidator');
    // 指定要调用的Script Include方法
    ga.addParam('sysparm_name', 'validateInput');
    // 将输入框值传入服务器端
    ga.addParam('sysparm_input_value', inputVal);
    
    // 异步调用服务器端逻辑,处理返回结果
    ga.getXMLAnswer(function(response) {
        // 根据返回结果做后续处理,比如弹窗提示、样式修改等
        alert(response);
    });
}

补充说明

  • 优先使用异步的getXMLAnswer(),避免getXMLWait()的同步调用导致页面卡顿。
  • 验证逻辑可按需扩展,比如检查输入值是否在数据库中重复、是否符合特定格式等,所有逻辑都在Script Include中实现即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:35:21