Ошибка, когда сервлет передает объект обратно в JSP - PullRequest
0 голосов
/ 21 декабря 2018

Я работаю над учебником из этой книги JSP Murach .В примере, над которым я работаю, пользователь просит ввести текст в три поля в index.jsp.Поля отправляют свои записи в сервлет, и сервлет doPost проверяет, было ли какое-либо из трех полей оставлено пустым.Если это происходит, index.jsp отправляется снова, и любые поля, которые не были пустыми, заполняются их предыдущими записями.Я думаю, что я сделал это, как показано в книге, а также то, что показывает этот сайт в разделе 3. Передача объектов , но я все еще получаю следующую ошибку:

javax.el.PropertyNotFoundException: свойство [inputA] недоступно для чтения по типу [package01.User]

Возможно, мой класс User установлен неправильно?Я не очень понимаю, как JSP должен понимать «сообщение» или «пользователь».Ясно, что он не понимает «пользовательские» свойства inputA, inputB, inputC.

enter image description here

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>Index JSP</title>
  </head>
  <body>
  <p>Index JSP body</p>
  <p>${message}</p>
  <form action="servlet01" method="post">
    <input type="hidden" name="nextPage" value="revisitIndex">
    Input A:<input title="A" type="text" name="inputA" value="${user.inputA}"><br>
    Input B:<input title="B" type="text" name="inputB" value="${user.inputB}"><br>
    Input C:<input title="C" type="text" name="inputC" value="${user.inputC}"><br>
    <input type="submit" value="Next Page">
  </form>
  </body>
</html>

Servlet01 doPost

protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String nextPage = request.getParameter("nextPage");
        if (nextPage == null){
            nextPage = "continueToThanks";
        }

        String url = "/thanks.jsp";
        String message = "";
        if(nextPage.equals("revisitIndex")){
            String inputA = request.getParameter("inputA");
            String inputB = request.getParameter("inputB");
            String inputC = request.getParameter("inputC");
            User user = new User(inputA, inputB, inputC);

            if(inputA == null || inputB == null || inputC == null ||
                    inputA.isEmpty() || inputB.isEmpty() || inputC.isEmpty()){

                url = "/index.jsp";
                message = "Please fill out all three text boxes.";
            }

            request.setAttribute("message", message);
            request.setAttribute("user", user);
        }

        getServletContext()
                .getRequestDispatcher(url)
                .forward(request, response);
    }

Класс пользователя

package package01;

class User {
    private String inputA;
    private String inputB;
    private String inputC;

    User(String a, String b, String c){
        inputA = a;
        inputB = b;
        inputC = c;
    }

    public void setInputA(String a){ inputA = a; }
    public void setInputB(String b){ inputB = b; }
    public void setInputC(String c){ inputC = c; }

    public String getInputA(){ return inputA;}
    public String getInputB(){ return inputB;}
    public String getInputC(){ return inputC;}
}

1 Ответ

0 голосов
/ 01 августа 2019

Как прокомментировал JB Nizet, мой класс User должен быть общедоступным.Без модификатора общедоступного доступа ничто вне пакета с именем «package01» не может получить доступ к классу.

...