您如何处理这样一个事实,即使参数,URL在xPages中也区分大小写?例如URL:
my_page.xsp?folderid=785478 ... is not the same as ...
my_page.xsp?FOLDERID=785478
例如,如何正确检查params是否包含某些键,例如 param.containsKey(“folderid”),当URL中存在“FOLDERID”时,它会工作。
答案 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不区分大小写 - 有人可以确认一下。
希望这有帮助。