Конфликт между @FormParam и $ {param} - PullRequest
0 голосов
/ 28 апреля 2020

Я могу использовать язык выражений для печати значения формы POST из текущего запроса на мой взгляд:

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

Но переменная param.fooName EL больше не заполняется, когда я собираю данные формы в Java переменная с использованием аннотации @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 представление)?

1 Ответ

0 голосов
/ 29 апреля 2020

Ошибка или функция, @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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...