13

今天我使用 servlet 从 HTML 页面接收 POST,然后重定向到我的 JSF 页面。

这是我的实际 Servlet:

   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)?如何?我想将 Servlet 替换为……更好的东西。

4

1 回答 1

22

你当然可以。无论如何,大多数 JSF 请求都是POSTs,因此,如果您使用要处理POST请求的 JSF 页面的路径,则可以在该页面支持的托管 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 回答