Загрузка, вставка, получение и отображение изображения с использованием JPA JSF MySql [закрыто]

Я задаю этот вопрос и собираюсь ответить на этот вопрос, чтобы другие могли его изучить. Это довольно просто и прямо. Я надеюсь, что это помогает.

Это оно

Создайте свою сущность, например, клиента с вашим полем BLOB-объектов

@Entity
public class Customer implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Lob
    private byte[] logo;


//setter and getter required

Создайте сессионный компонент, например, для связи с объектом.

@Stateless
public class CustomerService {
    @PersistenceContext(unitName = "ImageTestPU")
    private EntityManager em;

    public void persist(Object object) {
        em.persist(object);
    }


    public List<Customer> customerList(){
       return em.createNamedQuery(stat).getResultList();
    }

    public byte[] loadImage(int id){
        return em.find(Customer.class, id).getLogo();
    }

}

Создайте свой управляемый компонент. Принять к сведениюprivate UploadedFile uploadedFile; это из

org.apache.myfaces.custom.fileupload.UploadedFile; which i will explain later.

public class CustomerManager {
    @EJB
    private CustomerService customerService;
    private Customer customer = new Customer();
    private List<Customer> list;
    private DataModel<Customer> dataModel;
    private UploadedFile uploadedFile;

    public CustomerManager() {
    }
    public void createCustomer() throws IOException{
        customer.setId(0);
         byte[] file = uploadedFile.getBytes();
         customer.setLogo(file);
         customerService.persist(customer);
    }

    public void loadTable(){
         dataModel = new ListDataModel<Customer>();
        dataModel.setWrappedData(customerService.findStatus(customer));
    } 

    public String view(){
        customer = dataModel.getRowData();
        return "view.xhtml";
    }
//setter and getter for all
//use the loadTable method to load your model table

Создайте класс сервлета. Это наиболее важно для отображения вашего изображения. Обратите внимание на следующее, они являются наиболее важными

@WebServlet(name = "ImageServlet", urlPatterns = {"/ImageServlet"})

это чтобы избежать редактирования web.xml, проще, если вы спросите меня. просто получите URL файла.

int id =Integer.parseInt(request.getParameter("id"));
        byte[] image = customerService.loadImage(id);

        response.setContentType("image/jpeg");
        ServletOutputStream outputStream = response.getOutputStream();
        outputStream.write(image);
        outputStream.close();

Вышеприведенная строка кажется очевидной. Не беспокойтесь оid это будет использоваться для ссылки на изображение в xhtml позже.

так что полный сервлет больше похож на этот

@WebServlet(name = "ImageServlet", urlPatterns = {"/ImageServlet"})
public class ImageServlet extends HttpServlet {
    @EJB
    private CustomerService customerService;


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


        int id =Integer.parseInt(request.getParameter("id"));
        byte[] image = customerService.loadImage(id);

        response.setContentType("image/jpeg");
        ServletOutputStream outputStream = response.getOutputStream();
        outputStream.write(image);
        outputStream.close();
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}

Это создать XML, который загружает и сохраняет байты изображения в БД

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:t="http://myfaces.apache.org/tomahawk">
    <h:head>
        <title> Title</title>
    </h:head>
    <h:body>
        <h:form id="uploadForm" enctype="multipart/form-data">
            <h:panelGrid columns="2">
                username :<h:inputText value="#{customerManager.customer.username}"/>
                Status :<h:inputText value="#{customerManager.customer.status}"/>
                <h:outputLabel for="file" value="Select file" />
                <t:inputFileUpload id="file" value="#{customerManager.uploadedFile}" required="true" />
                    <h:message for="file" style="color: red;" />

                    <h:commandButton value="Create" action="#{customerManager.createCustomer()}"/>
            </h:panelGrid>
        </h:form>
    </h:body>
</html>

Это страница списка, чтобы перечислить ваши данные в БД. он прикреплен с помощью командной ссылки, которая ведет на страницу просмотра

<h:dataTable value="#{customerManager.dataModel}" var="list">
            <h:column>
                #{list.id}
            </h:column>

            <h:column>
                <h:commandLink value="#{list.username}" action="#{customerManager.view}"  />

            </h:column>
        </h:dataTable>

В заключение я хотел бы, чтобы это помогло кому-нибудь когда-нибудь. И я хотел бы, чтобы кто-то потратил время на решение проблем самым простым способом, потому что у меня все еще остается много вопросов без ответов, но я продолжу читать, когда я все сделаю правильно, я поделюсь этим самым простым способом для людей, подобных мне. Дляupload ранее упомяните, пожалуйста, вам нужно будет скачать в библиотеку томагавк. Я думаю, что людям нравится блог Balusc об этом. Он просто выглядел сложнее, чем должно быть. просто выберите нужные вещи из блога и используйте их. Он хороший парень, не спорю об этом. ура

Ответы на вопрос(0)

Ваш ответ на вопрос