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

Domino中获取URL查询参数marker及移除方法技术咨询

问题分析与解决方案

你的核心问题是代码执行时机错误:按钮的onclick动作在用户点击时立即触发,此时你只是发起了授权重定向流程,用户还没去系统B完成授权,所以marker参数根本不存在;等用户从系统B授权完成、带着marker重定向回你的页面时,页面重新加载,但按钮没有被点击,那段获取参数的代码根本没运行——只有再次点击按钮,才会触发代码去读取已经存在的marker。

要解决这个问题,我们需要把获取并处理marker的逻辑移到页面加载时自动执行,而不是依赖按钮点击;按钮只负责发起授权流程即可。

具体实现步骤

1. 页面加载时自动检查并处理marker参数

在你的Nav2.xsp页面中添加beforePageLoad事件,这个事件会在页面每次加载(包括从系统B重定向回来时)自动触发:

<xp:eventHandler event="beforePageLoad" submit="true" refreshMode="complete">
    <xp:this.action><![CDATA[#{javascript:
        // 检查URL中是否存在marker参数
        var marker = param.get("marker");
        if (marker) {
            print("Successfully got marker param: " + marker);
            
            // 这里添加你的marker处理逻辑,比如保存到session、调用业务接口等
            sessionScope.put("authorizedMarker", marker);
            
            // 处理完成后,移除URL中的marker参数,提升用户体验
            var currentUrl = context.getUrl().toString();
            // 正则表达式移除marker参数(处理单独存在或和其他参数共存的情况)
            var cleanUrl = currentUrl.replace(/([?&])marker=[^&]+(&|$)/, function(match, prefix, suffix) {
                // 如果是中间参数,保留前面的&;如果是最后一个参数,去掉多余的?或&
                return suffix ? prefix : '';
            });
            // 处理URL末尾可能遗留的?
            cleanUrl = cleanUrl.replace(/\?$/, '');
            
            // 重定向到干净的URL
            facesContext.getExternalContext().redirect(cleanUrl);
        }
    }]]></xp:this.action>
</xp:eventHandler>

2. 简化按钮逻辑,只负责发起授权流程

修改按钮的onclick代码,去掉获取marker的部分,专注于触发授权重定向:

<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
    <xp:this.action><![CDATA[#{javascript:
        var redirectUrl = context.getUrl().toString();
        var errorRedirectUrl = context.getUrl().toString();
        var EGRZAuthObject = new ru.iteko.egrz.requestprocessors.EGRZAuthorization();
        // 只发起授权流程,此时还没有marker参数,无需尝试获取
        EGRZAuthObject.initializeAuthProcess(redirectUrl, errorRedirectUrl);
    }]]></xp:this.action>
</xp:eventHandler>

为什么这样有效?

  • 当用户第一次点击按钮时:按钮发起授权重定向,用户被带到系统A→系统B完成授权。
  • 用户授权完成后:系统B重定向回Nav2.xsp?marker=xxx,此时页面的beforePageLoad事件自动触发,检测到marker参数并处理,然后重定向到不带marker的干净URL。
  • 整个过程无需用户再次点击按钮,完全自动处理marker参数。

额外注意点

确保你在调用initializeAuthProcess时传入的redirectUrl就是Nav2.xsp的完整URL,这样系统B才能正确把用户重定向回这个页面,让beforePageLoad事件能捕获到marker参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:32:00