2012-10-05 16 views
8

今日私は、サーブレットを使用してHTMLページからPOSTを受け取り、JSFページにリダイレクトしています。POSTパラメータを受け取るJSF

これは私の実際のサーブレットです:

public class CommInServlet extends HttpServlet { 

    private String reportKey; 

     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
     req.getSession(true).setAttribute("reportKey", req.getParameter("reportkey")); 
     req.getRequestDispatcher("main.xhtml").forward(req, resp); 
     } 

    } 

HTMLの投稿ページ:

<html> 
<head /> 
<body> 
<form action="Filtro" method="post"> 
<input type="text" size="120" name="reportkey" value="XXXXXXXXXXXX" /> 
<input type="submit" value="doPost" /> 
</form> 
</body> 
</html> 

それは私のJSFページ(ManagedBean)に直接投稿することは可能ですか?どうやって? サーブレットを何かのものに置き換えたいのですが...。

答えて

18

もちろん可能です。とにかくほとんどのJSFリクエストはPOSTです。したがって、JSFページへのパスを使用してPOSTリクエストを処理しようとする場合、そのページでサポートされているマネージドBean内のパラメータを取得するか、ページ自体。マネージドBean内

:マネージドBean内

 @PostConstruct 
     public void initMyBean(){ 
     /**This map contains all the params you submitted from the html form */ 
     Map<String,String> requestParams = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); 
     requestParams.get("reportKey"); 
         } 

OR は、管理対象Beanがインスタンス化された後、あなたが@PostConstructで注釈を付けてきたメソッドが実行されます

 @ManagedProperty(value="#{param.reportKey}") 
    String reportKey; 
    //getter and setter of course! 

を持っています。上記は、マネージドBean内のアクセスを提供します。

あなたはしかし、最初のページ内の値が必要な場合は、あなたがあなたのページでは、あなたのビュー内からのパラメータに検証を実行することができますどのように

 <f:metadata> 
     <f:viewParam name="reportKey" value="#{backingBean.reportKey}" required="true"/> 
    </f:metadata> 

お知らせ(好ましくは上部にある)、これを持つことができます。かなりクールな機能。

htmlフォームactionの属性をJSFビューのパスに設定してください。

+0

viewParamでは、required = "true"は何を意味しますか? – Erick

+0

@Erick 'required =" true "'指定されたパラメータがnullでないことを保証します。 – kolossus

関連する問題