私はJSFを使用しており、いくつかの処理を実行し、faces-config.xmlナビゲーションルールに応じてナビゲートする次のページを決定する変数「outcome」を設定するバッキングBeanメソッドがあります。
私がやりたいのは、次のページに移動したときにURL(バッキングBean内?)にパラメーターを追加することです。ただし、バッキングBeanメソッドがあるハンドラーには、HttpRequestオブジェクトへの参照はありません。これは古くからある既存のハンドラーなので、どうすればいいのか気になります。
request.setAttribute("name", value);
JSFで利用できる別のアプローチはありますか?どんな助けでも大歓迎です。
こんにちは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();
}
例外は生成されませんが、「サーバーで不明なエラーが発生しました」という500Httpエラーが発生します。ログにはもう少し詳細が表示されますが、役立つには不十分です。
エラー[ライフサイクル]JSF1054:(フェーズID:INVOKE_APPLICATION 5、ビューID:/registration/productValidation.jsp)フェーズ実行中にスローされた例外:javax.faces.event.PhaseEvent [source = com.sun.faces.lifecycle.LifecycleImpl@591dae ] 11:19:12,186エラー[[Faces Servlet]]サーブレットFacesサーブレットの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 javax.faces.component.UICommand.broadcast(UICommand.java:387)atorg.ajax4jsf.component。AjaxViewRoot.processEvents(AjaxViewRoot.java:321)at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:296)at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:253)atorg.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)82)com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)で82)com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)で
どんなアイデアでも大歓迎です。ありがとう!
わかりました、あなたのコメントに感謝します、私はいくつかのものを変えました、そして今私は持っています:
FacesContext.getCurrentInstance().getExternalContext().redirect("mypage.jsp?serialNumber=555555");
デバッグすると、mypage.htmでresourcebundle(プロパティファイル)からいくつかのヘッダーを表示しているため、リダイレクトが機能していることがわかります。ヘッダーを表示しようとすると、次の行でNullPointerが発生します。
FacesContext context = FacesContext.getCurrentInstance();
コンテキストがnullであるため、ログにはNullPointerエラーが表示されますが、ページのURLは正しいです。アドレスバーに http://..../mypage.jsp?serialNum=5555 と表示されています。ページの内容を表示するだけでは問題が発生しているようです。まだこれまでのところ近い;-(