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

关于ON CHANGE中ACTIONS用法的问题及空指针异常排查

关于LSFusion中ON CHANGE INPUT ACTIONS的问题

问题场景

我尝试使用以下公式:

ON CHANGE { INPUT x = STRING LIST name(DimNomenkl s1) ACTIONS 'myaction' { MESSAGE 'current line : ' + x; } DO {....}}

遇到三个问题:

  • 不添加ACTIONS时,字段正常显示清除X按钮,但添加ACTIONS后该按钮消失。
  • 想咨询ACTIONS是否支持多个按钮,当前语法是否存在问题?
  • 同时出现了如下空指针异常:
java.lang.NullPointerException
    at java.base/java.util.regex.Matcher.getTextLength(Matcher.java:1770)
    at java.base/java.util.regex.Matcher.reset(Matcher.java:416)
    at java.base/java.util.regex.Matcher.<init>(Matcher.java:253)
    at java.base/java.util.regex.Pattern.matcher(Pattern.java:1134)
    at lsfusion.server.language.ScriptingLogicsModule.parseKeyStrokeOptions(ScriptingLogicsModule.java:2304)
    at lsfusion.server.language.ScriptingLogicsModule.lambda$7(ScriptingLogicsModule.java:2297)
    at lsfusion.base.col.implementations.simple.SingletonSet.mapListValues(SingletonSet.java:428)
    at lsfusion.server.language.ScriptingLogicsModule.getContextListEntity(ScriptingLogicsModule.java:2295)
    at lsfusion.server.language.ScriptingLogicsModule.addScriptedInputAProp(ScriptingLogicsModule.java:2362)
    at lsfusion.server.language.LsfLogicsParser.inputActionDefinitionBody(LsfLogicsParser.java:30917)
    at lsfusion.server.language.LsfLogicsParser.recursiveExtendContextActionDB(LsfLogicsParser.java:23854)
    at lsfusion.server.language.LsfLogicsParser.recursiveContextActionDB(LsfLogicsParser.java:23736)
    at lsfusion.server.language.LsfLogicsParser.actionDefinitionBody(LsfLogicsParser.java:23655)
    at lsfusion.server.language.LsfLogicsParser.keepContextFlowActionDefinitionBody(LsfLogicsParser.java:23335)
    at lsfusion.server.language.LsfLogicsParser.listActionDefinitionBody(LsfLogicsParser.java:31831)
    at lsfusion.server.language.LsfLogicsParser.listTopContextDependentActionDefinitionBody(LsfLogicsParser.java:23159)
    at lsfusion.server.language.LsfLogicsParser.formActionDeclaration(LsfLogicsParser.java:9686)
    at lsfusion.server.language.LsfLogicsParser.formActionObject(LsfLogicsParser.java:7704)
    at lsfusion.server.language.LsfLogicsParser.formPropertyOptionsList(LsfLogicsParser.java:6598)
    at lsfusion.server.language.LsfLogicsParser.formMappedPropertiesList(LsfLogicsParser.java:7396)
    at lsfusion.server.language.LsfLogicsParser.formPropertiesList(LsfLogicsParser.java:5981)
    at lsfusion.server.language.LsfLogicsParser.formStatement(LsfLogicsParser.java:1750)
    at lsfusion.server.language.LsfLogicsParser.statement(LsfLogicsParser.java:997)
    at lsfusion.server.language.LsfLogicsParser.statements(LsfLogicsParser.java:705)
    at lsfusion.server.language.LsfLogicsParser.script(LsfLogicsParser.java:659)
    at lsfusion.server.language.ScriptParser.initParseStep(ScriptParser.java:61)
    at lsfusion.server.language.ScriptingLogicsModule.parseStep(ScriptingLogicsModule.java:5284)
    at lsfusion.server.language.ScriptingLogicsModule.initMainLogic(ScriptingLogicsModule.java:244)
    at lsfusion.server.logics.controller.init.InitMainLogicTask.runInnerTask(InitMainLogicTask.java:28)
    at lsfusion.server.language.ScriptingLogicsModule.runInit(ScriptingLogicsModule.java:303)
    at lsfusion.server.physics.dev.module.controller.init.GroupModuleTask.runTask(GroupModuleTask.java:20)
    at lsfusion.server.physics.dev.module.controller.init.GroupModuleTask.runTask(GroupModuleTask.java:1)
    at lsfusion.server.base.task.GroupSingleTask$1.run(GroupSingleTask.java:67)
    at lsfusion.server.base.task.Task.proceed(Task.java:154)
    at lsfusion.server.base.task.Task$1.aspectRun(Task.java:112)
    at lsfusion.server.base.controller.thread.ExecutorFactory$AspectRunnable.run(ExecutorFactory.java:475)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:829)
    at lsfusion.server.base.controller.thread.ExecutorFactory$ClosableDaemonThreadFactory$ClosableThread.run(ExecutorFactory.java:554)

问题解答

1. 清除按钮消失的处理

添加ACTIONS后默认清除按钮会被覆盖,LSFusion会认为你要自定义输入框操作按钮。要保留清除按钮,需手动添加内置的清除动作,示例:

ACTIONS 'myaction' { MESSAGE 'current line : ' + x; }, CLEAR { }

2. 多按钮支持与语法修正

ACTIONS支持多个按钮,语法上需用逗号分隔不同动作定义。你的原始语法缺少动作分隔,这也是导致空指针异常的核心原因——解析器无法正确识别动作结构。修正后的完整示例:

ON CHANGE { 
    INPUT x = STRING LIST name(DimNomenkl s1) 
    ACTIONS 
        'myaction' { MESSAGE 'current line : ' + x; },
        'secondAction' { MESSAGE 'second action triggered'; },
        CLEAR { }  // 保留清除按钮
    DO { .... }
}

3. 空指针异常的解决

空指针发生在正则解析步骤,是因为原始语法不符合LSFusion的解析规则。按照上述修正后的格式,确保动作间用逗号分隔、每个动作的名称和逻辑块格式正确,即可避免解析错误引发的空指针。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:17:53