如何处理URL在xPages中区分大小写这一事实?

如何处理URL在xPages中区分大小写这一事实?,xpages,Xpages,您如何处理这样一个事实,即URL在xPages中甚至对于参数也是区分大小写的?例如URL: my_page.xsp?folderid=785478 ... is not the same as ... my_page.xsp?FOLDERID=785478 例如,如何正确检查参数是否包含某个键,例如。 参数containsKey(“folderid”),当URL中有“folderid”时,该参数不起作用 确保选择一个,所以可以选择大写或小写 除此之外,我建议 KeyValuePair<s

您如何处理这样一个事实,即URL在xPages中甚至对于参数也是区分大小写的?例如URL:

my_page.xsp?folderid=785478 ... is not the same as ...
my_page.xsp?FOLDERID=785478
例如,如何正确检查参数是否包含某个键,例如。
参数containsKey(“folderid”),当URL中有“folderid”时,该参数不起作用

确保选择一个,所以可以选择大写或小写 除此之外,我建议

KeyValuePair<string,string> kvp = null;
foreach(KeyValuePair<string,string> p in param)
{
if(UPPERCASE(p.Key) == UPPERCASE("folderid"))
{
kvp = p;
break;
}
}
KeyValuePair kvp=null;
foreach(参数中的KeyValuePair p)
{
if(大写(p.Key)=大写(“folderid”))
{
kvp=p;
打破
}
}

语法不正确,现在就用c#中的大写方法,但你明白了这一点。

最简单的答案当然是显而易见的。确保在整个应用程序中使用的参数在生成的每个url上都是相同的,并且知道会发生什么。实现这一点的一个好方法是创建一个ssjs函数,该函数根据您提交的对象为您生成url

在这个函数中,您可以检查您正在接收的对象,并使用关键字等生成正确的url。通过这种方式,使用相同的输入参数生成两次url应该始终生成完全相同的url

另一种选择是用类似这样的代码进行双重检查

var key = "yourkey";

if(param.contains(@uppercase(key)) || param.contains(@lowercase(key)){
 // do stuff
}
但是,如果您正在解析的url是由您自己的应用程序生成的,则不必这样做


在主题发帖后编辑


另一个选项是直接从facescontext中绘制url,并首先将其转换为字符串。当它是字符串时,您可以自己解析参数

我建议定义几个便利@函数:

var @HasParam = function(parameter) {
 var result:boolean = false;
 for (var eachParam : param.keySet()) {
  if (eachParam.toLowerCase() == parameter.toLowerCase()) {
   result = true;
   break;
  }
 }
 return result;
};

var @GetParam = function(parameter) {
 var result = "";
 if (@HasParam(parameter)) {
  for (var eachParam : param.keySet()) {
   if (eachParam.toLowerCase() == parameter.toLowerCase()) {
    result = param.get(eachParam);
    break;
   }   
  }
 }
 return result;
};

然后,您可以安全地查询参数,而不必考虑大小写。为了获得额外的积分,您可以添加requestScope缓存,以便在检查之前在同一请求期间查看过的参数时,可以跳过密钥集的循环。

您可以使用此功能:

context.getUrlParameter('param_name')

然后测试它是否为null。

您可以结合服务器端替换/重定向来解决David提到的问题。因此,替换规则将重定向传入的Patrn,如下所示:

(/mypage/*=>转换为-/dbpath/mypage.xsp?*)替换很棘手,请小心处理

另外,我相信我在某个地方读到context.getUrlParameter不区分大小写-请有人确认一下


希望这有帮助。

这里的问题是他必须添加每个特定的键,所以如果不是大写和小写,而是混合大小写(无论出于什么原因),我知道我必须在我的应用程序中保持URL一致,这非常明显:-),我可以看到的问题是URL更像客户端的东西,用户可以在浏览器中键入/更改URL,我不能影响这个。。。例如,如果用户意外启用了caps lock,则URL立即出错。首先,如果您希望(或必须)支持用户键入URL,请进行说明。如果是的话,那就创建自己的SSJS函数来读取参数。从URL参数创建一个映射,并使所有参数名称小写,将值保留为原始大小写。阅读地图上的参数,我不同意。正如蒂莫已经说过的,如果他想支持这种行为,他需要确定。如果这不是真正必要的,那么让用户决定他是否希望看到错误页面,因为他/她的打字错误;)。我添加了第三个使用区分大小写参数的选项。我认为xpages core应该解决更基本的问题,而不是每个开发人员都使用一些自定义代码。它不仅与URL参数有关,甚至xpage名称在URL中也是区分大小写的,因此xpage.xsp与xpage.xsp不同。但真的不知道为什么会有这样的限制,因为您不能在DDE中同时创建xPage.xsp和xPage.xsp,这是被禁止的。顺便说一句,我一直认为web标准是不区分大小写的URL。。。所以“大写锁定”不应该是问题所在。根据w3c,URL可以区分大小写,但是大多数web服务器忽略了这一要求。正如pipalia提到的,您可以使用URL替换和重定向来解释用户手工输入地址错误和/或让他们更容易记住地址的原因。但坦率地说,如果你的用户曾经觉得需要在你的应用程序中手动键入深度链接,那么很可能应用程序的布局设计得很糟糕;内部实现通过可用参数在循环中使用equalsIgnoreCase。