0

在我看来,我可以使用表达式语言从当前请求中打印 POST 表单值:

<p>Foo Name: ${fn:escapeXml(param.fooName)}</p>

但是当我使用控制器中的注释param.fooName将表单数据捕获到 Java 变量中时,不再填充 EL 变量:@FormParam

@FormParam("fooName") String fooName

完整的流程是这样的:

  1. 浏览器提交表单到http://localhost:7101/myapp/rs/foo/new

    @POST
    @Path("/new")
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    @Produces(MediaType.TEXT_HTML)
    public Response saveNew(
        @FormParam("fooName") String fooName // <---
    ) {
        Map<String, Object> map = new HashMap<String, Object>();
        // Do stuff here
        return Response.ok(new Viewable("/foo/new", map)).build();
    }
    
  2. 视图从new.jsp

    <%@ page contentType="text/html" pageEncoding="UTF-8" %>
    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
    <p>Foo Name: ${fn:escapeXml(param.fooName)}</p>
    

如果我删除该@FormParam("fooName") String fooName行,则${fn:escapeXml(param.fooName)}再次包含表单数据。

有没有办法在两个位置(Java 控制器和 JSP 视图)访问表单数据?

4

1 回答 1

0

错误或功能,@FormParam似乎有副作用。但是,表单数据可在以下位置获得javax.servlet.http.HttpServletRequest

@POST
@Path("/new")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.TEXT_HTML)
public Response saveNew() {
    // null when it doesn't exist (no exception thrown)
    String fooName = request.getParameter("fooName");

    Map<String, Object> map = new HashMap<String, Object>();
    // Do stuff here
    return Response.ok(new Viewable("/foo/new", map)).build();
}
<%@ page contentType="text/html" pageEncoding="UTF-8" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<p>Foo Name: ${fn:escapeXml(param.fooName)}</p>
于 2020-04-29T07:32:22.823 回答