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