13

今日は、サーブレットを使用してHTMLページから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)に直接投稿することはできますか?どのように?サーブレットを何かに置き換えたい...もっと良い。

4

1 に答える 1

22

できますよ。ほとんどのJSFリクエストはPOSTとにかくsであるため、リクエストを処理する予定のJSFページへのパスを使用する場合は、そのページに基づくPOSTマネージド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");
                       }

または マネージドBean内に

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

注釈を付けたメソッドは@PostConstruct、マネージドBeanがインスタンス化された後に実行されます。上記により、管理対象Bean内にアクセスできるようになります。

ただし、最初にページ内の値が必要な場合は、ページ内(できれば上部)に値を含めることができます。

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

ビュー内からパラメーターの検証を実行する方法に注目してください。かなりクールな機能。

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

于 2012-10-06T04:51:13.833 に答える