4

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

4

2 回答 2

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 组件开销。

例如,当您想向映射到 URL 模式的 servlet 发送 POST 请求/foo/*并且您需要发送带有 name 的请求参数时bar,您需要创建如下表单:

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

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

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String bar = request.getParameter("bar");
    // ...
}
于 2012-04-16T15:13:51.817 回答
-1

您可以通过以下方式从 jsf 调用:

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

然后在 web.xml 中:

<servlet>
  <servlet-name>files</servlet-name>
  <servlet-class>com.Download</servlet-class>

于 2016-08-29T11:37:53.700 回答