SSJS onClick 操作不会在 XPage 上触发

SSJS onClick action will not fire on XPage

我找到了this question,但是好像没有解决,我还有更多要补充的。

首先,链接的问题定义了我遇到的几乎相同的问题。
1. 我正在使用 ExtLib
中的应用程序布局控件 2.按钮在那个控件里面不在里面都没有关系
3. CSJS 动作会从按钮触发,SSJS 动作不会触发。
4. 没有错误
5. 浏览器/缓存无关紧要,因为服务器端操作不会触发。

看到链接的问题后,我查看了包视图中的本地文件,发现了一个异常情况,这让我想知道这是否可能是原因。我以前从未见过这样的文件,甚至还查看了我的其他 xpage 项目以确保确定。

此文件无法删除,点击后显示window表示该元素不存在。

有谁知道这个文件是什么,我该如何删除它,或者我的应用程序是否已损坏?

**更多信息**

以下代码段是从位于本地目录中的 XPage 的 java 文件中复制的。我觉得一切都很好。

private UIComponent createEventHandler(FacesContext context, 
                UIComponent parent, PageExpressionEvaluator evaluator) {
            XspEventHandler result = new XspEventHandler();
            String sourceId = "button2/xp:eventHandler[1]/xp:this.action[1]/text()";
            MethodBinding action = evaluator.createMethodBinding(result,
                    "#{javascript:view.postScript(\"alert(\'server script fired!\')\");}",
                    null,null, sourceId);
            result.setAction(action);
            result.setSubmit(true);
            result.setEvent("onclick");
            result.setRefreshMode("complete");
            return result;
        }

编辑
将所有设计元素移动到一个新的 .nsf 中,这样文件就不再存在,这不会改变 SSJS onclick 操作未触发的问题。但是那个奇怪的文件不存在。

转换器/验证器是否失败?这可能会导致它在 Invoke Application 阶段之前跳过生命周期。要测试按钮是否实际工作,您还可以使用 "Do not validate or update data"。然后 SSJS 在 Apply Request Values 阶段运行。如果 SSJS 被触发(你不会在数据模型或组件中获得来自浏览器的最新数据),那么它是转换器或验证器失败的另一个好选择。