JSFでgetリクエストを処理する

ご存じのように、JSFはポストリクエストでのみ機能しますが、解析して取得できるメソッドがあります。





これは次のように行われます。



1.リクエストBeanを作成して、リクエストパラメータを取得します。

package ru.beans;<br><br>import javax.faces.context.FacesContext;<br>import javax.servlet.http.HttpServletRequest;<br><br> public class EntryBean {<br><br> // get- <br> private static final String PARAM_ID = "id" ;<br><br> private Integer id = null ;<br><br> // <br> public EntryBean() {<br> HttpServletRequest req = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();<br><br> String id = req.getParameter(PARAM_ID);<br> if (id != null ) {<br> setId(Integer.parseInt(id));<br> }<br> }<br><br> public void setId(Integer id) {<br> this .id = id;<br> }<br><br> public int getId() {<br> return id;<br> }<br><br> // <br> public String getEntryLocation() {<br> String result = "/userList.jsf" ;<br><br> if (getId() != null ) {<br> result = "/userDetail.jsf" ;<br> }<br><br> return result;<br> }<br>} <br><br> * This source code was highlighted with Source Code Highlighter .





2. PhaseListenerインターフェイスを実装します。

pacakage ru.lifecycle;<br><br>import javax.faces.component.UIViewRoot;<br>import javax.faces.context.FacesContext;<br>import javax.faces. event .PhaseEvent;<br>import javax.faces. event .PhaseId;<br>import javax.faces. event .PhaseListener;<br>import javax.servlet.http.HttpServletRequest;<br><br>import ru.beans.EntryBean;<br><br><br> public class RedirectPhaseListener implements PhaseListener {<br><br> // <br> public PhaseId getPhaseId() {<br> return PhaseId.RESTORE_VIEW;<br> }<br><br> // <br> public void beforePhase(PhaseEvent event ) {<br> FacesContext ctx = event .getFacesContext();<br> HttpServletRequest request = (HttpServletRequest)ctx.getExternalContext().getRequest();<br> <br> String path = request.getServletPath();<br> EntryBean entry = null ;<br> if ((path != null ) && path.endsWith( "/entry.jsf" )) {<br> // <br> entry = (EntryBean)ctx.getApplication().evaluateExpressionGet(ctx, "#{EntryBean}" , EntryBean. class );<br> try {<br> String location = entry.getEntryLocation();<br> <br> // ViewRoot <br> UIViewRoot newPage = ctx.getApplication().getViewHandler().createView(ctx, location);<br> ctx.setViewRoot(newPage);<br> <br> // , , : <br> if (entry.getId() != null ) {<br> customersBean.setCustomerId(entry.getId());<br> }<br><br> // - ... <br> } catch (Throwable e) {<br> log.error( "Failed to redirect" , e);<br> }<br> // , <br> ctx.renderResponse();<br> }<br> }<br><br> // <br> public void afterPhase(PhaseEvent event ) {<br> }<br>} <br><br> * This source code was highlighted with Source Code Highlighter .





3. faces-config.xmlでカテゴリを作成します

< lifecycle > <br> < phase-listener > ru.lifecycle.RedirectPhaseListener </ phase-listener > <br> </ lifecycle > <br><br> * This source code was highlighted with Source Code Highlighter .






All Articles