目前,我正在尝试以下JSF--Lib。
https:/www.ocpsoft.orgrewriteexamples
我有以下问题。
我有一个page:page.jsf
在我的页面中,我有多个参数,例如:-参数1-参数2。
String parameter1 = FacesContext.getCurrentInstance().getExternalContext()
.getRequestParameterMap().get("parameter1");
String parameter2 = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap()
.get("parameter2");
目前我的理解是,我可以在我的UrlConfigProvider类中添加这个。
.addRule(Join.path("page{parameter1}").to("portalmypage.jsf") .withInboundCorrection())
这对于一个参数来说是可行的。
但我如何才能对多个参数进行操作,这样URL就变成:page{parameter1}{parameter2}......。
有什么好办法吗?
重写API并没有为这个问题带来一个原生的解决方案。
.addRule()
.when(/* your condition */)
.perform(new HttpOperation() {
@Override
public void performHttp(HttpServletRewrite httpServletRewrite, EvaluationContext evaluationContext) {
// this is the default wrapper
HttpRewriteWrappedRequest request = ((HttpRewriteWrappedRequest) httpServletRewrite.getRequest());
// get the uri (example: '/index/p1/p2')
String uri = httpServletRewrite.getRequest().getRequestURI();
// split by slash
String[] split = uri.split("/");
// this is example specific
// split value 0 is empty and split value 1 is the page (e.g. 'index')
// for every folder increment the index
// for '/pages/index' the start index should 3
for (int i = 2; i < split.length; i++) {
String s = split[i];
// the request parameter is by default an immutable map
// but this returns a modifiable
request.getModifiableParameters().put("prefix" + (i - 1), new String[]{s});
}
}
});
唯一重要的部分是 HttpOperation
. 默认情况下 ServletRequest
被包裹在 HttpRewriteWrappedRequest
.
默认的 HttpServletRequest
不允许在初始化后更改参数。方法 getParameterMap()
返回一个不可变的映射。
getParameterMap()
的 HttpRewriteWrappedRequest
也返回一个不可变的地图。但是 getModifiableMap()
返回的显然是一个可修改的地图。
其余的应该是不言自明的。