JSF接收POST参数

时间:2012-10-05 16:58:38

标签: post jsf-2

今天我正在使用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)?怎么样? 我想更换一些东西......更好。

1 个答案:

答案 0 :(得分:21)

当然可以。无论如何,大多数JSF请求都是POST,所以如果你使用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!

在实例化托管bean之后,将使用@PostConstruct注释的方法执行。以上内容将允许您在托管bean中进行访问。

如果您首先需要页面中的值,则可以在页面中显示该值(最好在顶部)

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

请注意如何在视图中对参数执行验证。很酷的功能。

请确保将html格式action属性设置为JSF视图的路径。