msh*_*rma 4 jsf query-parameters
我正在使用JSF,我有一个支持bean方法,它执行一些处理并设置一个变量'outcome',然后根据faces-config.xml导航规则决定导航到的下一页.
我想要做的是在导航下一页时将参数添加到URL(在支持bean中?).但是在支持bean方法的Handler中,没有对HttpRequest对象的引用.这是一个已经存在了很长时间的现有处理程序,所以我想知道我该怎么做
request.setAttribute("name", value);
Run Code Online (Sandbox Code Playgroud)
JSF有不同的方法吗?任何帮助非常感谢.
HI BalusC,
我正在尝试实现您在下面解释的内容,但是我遇到了问题.这就是我所拥有的:
StringBuffer url = ( (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getRequestURL();
url.append( "?serialNumber=");
url.append(regBean.getSerialNumber());
try{ FacesContext.getCurrentInstance().getExternalContext().redirect(url.toString());
}catch (Exception ex){
ex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
没有生成异常,但是我收到500 Http错误"服务器遇到了未知错误." 日志显示了更多细节但不足以提供帮助:
ERROR [生命周期] JSF1054 :(阶段ID:INVOKE_APPLICATION 5,视图ID:/registration/productValidation.jsp)阶段执行期间抛出异常:javax.faces.event.PhaseEvent [source = com.sun.faces.lifecycle.LifecycleImpl@591dae ] 11:19:12,186 ERROR [[Faces Servlet]] servlet Faces Servlet的Servlet.service()在com的org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:435)抛出异常java.lang.IllegalStateException .sun.faces.context.ExternalContextImpl.redirect(ExternalContextImpl.java:421)at com.sun.faces.application.NavigationHandlerImpl.handleNavigation(NavigationHandlerImpl.java:181)at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl .java:130)at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents上的org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:321)中的javax.faces.component.UICommand.broadcast(UICommand.java:387) AjaxViewRoot.java:296)org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRo)ot.java:253)org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:466)at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)at com.sun.faces.lifecycle .Phase.doPhase(Phase.java:100)
任何想法都将非常感激.谢谢!
好的,谢谢你的评论,我改变了一些东西,现在我有:
FacesContext.getCurrentInstance().getExternalContext().redirect("mypage.jsp?serialNumber=555555");
Run Code Online (Sandbox Code Playgroud)
在调试时,我可以看到重定向正在工作,因为在mypage.htm上我正在显示来自resourcebundle(属性文件)的一些头文件,所以当它试图获得要显示的头时,它在下面的行上遇到NullPointer:
FacesContext context = FacesContext.getCurrentInstance();
Run Code Online (Sandbox Code Playgroud)
context为null,因此日志显示NullPointer错误,但页面的url是正确的我可以看到地址栏显示 http://..../mypage.jsp?serialNum = 5555 正如预期的那样!它似乎只是显示页面的内容有困难.到目前为止如此接近;-(
您需要自己触发ExternalContext#redirect()bean操作方法.
public void submit() {
String url = "page.jsp?name1=value1&name2=value2";
FacesContext.getCurrentInstance().getExternalContext().redirect(url);
}
Run Code Online (Sandbox Code Playgroud)
如果您的IDE验证器催人泪下有关void操作方法,那么你可以忽略它或宣布回String,并把return null;在方法块的结束.
如果你想设置的特定参数重新在后续请求一些豆类,那么你可以将它们设置为通过faces-config.xml中的托管属性#{param.name1}和#{param.name2}.
也就是说,请求属性不应与请求参数混淆.请求属性仅附加到服务器端的当前请求.它们绝不会传递给下一个请求.在那里,您可以使用请求参数,您可以将其附加到重定向URL,也可以在响应页面的POST表单中包含隐藏参数.
此外,知道您可以获取HttpServletRequestJSF 的句柄可能很有用ExternalContext#getRequest().但是,您应该尽量避免在JSF引擎盖下运行"原始"Servlet API.尽可能多地使用JSF提供的设施.
| 归档时间: |
|
| 查看次数: |
13343 次 |
| 最近记录: |