你如何处理这样的事实,即URL在xPages中是区分大小写的?

时间:2012-02-29 08:06:38

标签: xpages

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

my_page.xsp?folderid=785478 ... is not the same as ...
my_page.xsp?FOLDERID=785478

例如,如何正确检查params是否包含某些键,例如 param.containsKey(“folderid”),当URL中存在“FOLDERID”时,它会工作。

5 个答案:

答案 0 :(得分:5)

我建议定义一些方便的@Functions:

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缓存,以便在检查您之前在同一请求中查看过的参数时跳过keySet循环。

答案 1 :(得分:0)

确保决定一个,所以大写或小写 除此之外,我建议像

KeyValuePair<string,string> kvp = null;
foreach(KeyValuePair<string,string> p in param)
{
if(UPPERCASE(p.Key) == UPPERCASE("folderid"))
{
kvp = p;
break;
}
}

语法不正确并且现在在c#中使用大写方法,但是你得到了点

答案 2 :(得分:0)

最简单的答案当然是显而易见的。确保通过您的应用程序使用的参数在您生成的每个URL上始终是相同的,并且知道会发生什么。完成此任务的一个好方法是创建一个ssjs函数,根据您提交的对象为您生成url。

在此功能中,您可以检查您正在接收哪个对象,并使用关键字等生成正确的URL。这种方式生成两次具有相同输入参数的URL应始终生成完全相同的URL。

另一种选择就是用一些像这样的代码来仔细检查

var key = "yourkey";

if(param.contains(@uppercase(key)) || param.contains(@lowercase(key)){
 // do stuff
}

但是,如果您要解析的URL是由您自己的应用程序生成的,则不应该是必要的


在主题启动后发布

后进行编辑

另一种选择是直接从facescontext抓取url并首先将其转换为字符串。如果是字符串,您可以自己解析参数。

答案 3 :(得分:0)

您可以使用此功能:

context.getUrlParameter('param_name')

然后测试它是否为空。

答案 4 :(得分:0)

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

http://myhost/mypage/param(/ mypage / * =&gt;转换为 - /dbpath/mypage.xsp?*) - 替换很棘手所以请小心处理。

另外我相信我在某处读到了context.getUrlParameter不区分大小写 - 有人可以确认一下。

希望这有帮助。