首页 > 解决方案 > JPA 实体:javax.el.PropertyNotFoundException:在类型上找不到属性 [base64String]

问题描述

当我刚开始学习 Entity 和 JSP 时,我遇到了一个问题。

我有一个学生班;

package tosun;

import org.hibernate.annotations.Type;

import javax.persistence.*;
import java.io.UnsupportedEncodingException;
import java.util.Base64;

@Entity
@Table(name = "students")
public class Student {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Column(name = "user_id")
    protected int id;

    @Lob
    @Type(type = "org.hibernate.type.BinaryType")
    @Column(name = "image")
    private byte[] base64Image;

    @Column(name = "first_name")
    protected String firstName;

    @Column(name = "last_name")
    protected String lastName;

    @Column(name = "email", unique = true)
    protected String email;

    @Transient public String base64String;

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public byte[] getBase64Image() {
        return base64Image;
    }

    public void setBase64Image(byte[] base64Image) {
        this.base64Image = base64Image;
    }

    @Transient
    public void getBase64String() throws UnsupportedEncodingException {

        if(this.base64Image != null){
            this.base64String = new String(Base64.getEncoder().encode(getBase64Image()));
        }
    }

    public Student(String firstName, String lastName, String email) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
    }

    public Student(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = "student@default.com";
    }

    public Student() {
    }
}

还有一个控制器类,它创建一个请求并将其分派到 view_students.jsp 页面。

    private void listStudents(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        StudentDAO studentDAO = new StudentDAO();
        // Step 0: Add Data
        List<Student> students = studentDAO.getStudentList();
        request.setAttribute("list", students);

        // Step 1: get request dispatcher
        RequestDispatcher dispatcher = request.getRequestDispatcher("/view_students.jsp");

        // Step 2: forward the request to JSP
        dispatcher.forward(request, response);
    }



<%@ page import="java.util.Base64" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<link rel="stylesheet" href="css/font-awesome.min.css">

<html>
<head>
    <style>
        .btn {
            background-color: DodgerBlue;
            border: none;
            color: white;
            padding: 12px 16px;
            font-size: 16px;
            cursor: pointer;
        }

        /* Darker background on mouse-over */
        .btn:hover {
            background-color: RoyalBlue;
        }
    </style>
    <style>
        table {
            font-family: arial, sans-serif;
            border-collapse: collapse;
            width: 100%;
        }
        td, th {
            border: 1px solid #dddddd;
            text-align: left;
            padding: 8px;
        }
        table, th, td {
            border: 1px solid black;
        }
        tr:nth-child(even) {
            background-color: #dddddd;
        }
    </style>
    <title>View Students</title>
</head>
<br>
<body>
<h2>Student Table Demo</h2>
<hr>
<form action="Controller" method="get" id="form1">
<br/>
    <table border="1" >
        <thead>
            <tr>
                <th>First Name</th>
                <th>Last Name</th>
                <th>Email Address</th>
                <th>Image</th>
                <th>Actions</th>
            </tr>
        </thead>
    <c:forEach var="tempStudent" items="${list}">

        <c:url var="deleteLink" value="Controller">
            <c:param name="command" value="DELETE" />
            <c:param name="studentId" value="${tempStudent.id}" />
        </c:url>

        <tr>
            <td>${tempStudent.firstName}</td>
            <td>${tempStudent.lastName}</td>
            <td>${tempStudent.email}</td>

     <!--      <img src="data:image/jpg;base64,${image}" width="240" height="300"/> -->

                <img src="data:image/jpg;base64,${tempStudent.base64String}" width="240" height="300"/>
        <!--    <td><img src="data:image/jpeg;base64,${tempStudent}.base64String"  alt="image">  </td> -->

         <!--   <td><img src="${sessionScope.url}" width="240" height="300"/></td>  -->
   <!--         <img src="data:image/png;base64,${url}"> -->
            <td>
                <input type="submit" formmethod="post" name="buttonEdit" value="Edit" class='btn btn-default'>
                <a href="${deleteLink}">Delete</a>

                <form action="Controller" method="post" enctype="multipart/form-data" >
                    <input type="hidden" value="${tempStudent.id}" name="id" >
                    <input type="hidden" value="UPLOAD_IMAGE" name="command">
                    <input type="file" name="photo">
                    <input type="submit" value="upload"/>
                </form>
       <!----        <input type="submit" formmethod="get"  onclick="location.href='${deleteLink}'" name="buttonDelete" value="Delete" class='btn btn-default'>
         ---->
            </td>
        </tr>
    </c:forEach>
    </table>
    <br><br/>
</form>
<form action="student-form.jsp">
        <input type="button" value="Create New Student" class='btn btn-default'
                    onclick="window.location.href='student-form.jsp'; return false;"/>
</form>
</body>
</html>


此工作返回错误如下所示;消息 javax.el.PropertyNotFoundException:在类型 [tosun.Student] 上找不到属性 [base64String]

说明 服务器遇到了阻止它完成请求的意外情况。

例外

org.apache.jasper.JasperException: javax.el.PropertyNotFoundException: 在类型 [tosun.Student] 上找不到属性 [base64String] org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:639) org.apache.jasper .servlet.JspServletWrapper.service(JspServletWrapper.java:515) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329) javax .servlet.http.HttpServlet.service(HttpServlet.java:733) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) tosun.Controller.listStudents(Controller.java:123) tosun.Controller .doGet(Controller.java:64) javax.servlet.http.HttpServlet.service(HttpServlet.java:626) javax.servlet.http.HttpServlet.service(HttpServlet.java:733) org.apache.tomcat.websocket.server .WsFilter.doFilter(WsFilter.java:53)

我读到该建议是添加 @Transient 字段,但它不起作用。有什么想法或建议吗?谢谢。

标签: javajspwebentity

解决方案


在我解决这个问题的经验之后,我注意到传递给 jsp 页面的对象必须包含在 jsp 代码中调用的每个属性的 getter 方法。它解决了我的问题。


推荐阅读