从Facelets调用servlet的正确方法?

时间:2012-04-16 14:22:57

标签: jsf servlets facelets

使用带有提交按钮的表单从facelets文件调用servlet的正确方法是什么?是否需要特定的表格?

2 个答案:

答案 0 :(得分:10)

只使用纯HTML <form>而不是JSF <h:form>。 JSF <h:form>默认情况下向当前视图ID的URL发送POST请求,并默认调用FacesServlet。它不允许您更改表单操作URL或方法。纯HTML <form>允许您指定不同的URL,如果需要,还可以指定方法。

以下启动示例向Google发送搜索请求:

<form action="http://google.com/search">
    <input type="text" name="q" />
    <input type="submit" />
</form>

请注意,您也不需要为输入/按钮使用JSF组件。可以使用<h:inputText>等,但不会在关联的辅助bean中设置值。然后不需要JSF组件开销。

例如,如果您希望将POST请求发送到映射到/foo/*的URL模式的servlet,并且您需要发送名为bar的请求参数,那么您需要按如下方式创建表单:

<form action="#{request.contextPath}/foo" method="post">
    <input type="text" name="bar" />
    <input type="submit" />
</form>

这样将调用servlet的doPost()方法:

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String bar = request.getParameter("bar");
    // ...
}

答案 1 :(得分:-1)

您可以从jsf:

以下方式致电

composer --no-update require dmstr/yii2-adminlte-asset:*

然后在web.xml中:

        <h:outputText value="Download" />
        <h:outputLink value="#{request.contextPath}/files" id="btnDownload1" styleClass="redButton">
        <h:outputText value="FILESDOWNLOAD" />
        </h:outputLink>
    </h:panelGrid>