質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

0回答

1051閲覧

Java 日報にコメントをつけたい

yori_orca

総合スコア0

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2021/07/05 13:47

eclipseを使って、従業員日報管理システムを作っています。
従業員に日報に対して、コメントをつけられる機能を追加したいのですが、送信ボタンを押すとエラーが出てしまいました。

new.jspにreport_idの値が含まれていないからだと思っています。が、やり方がわかりません。
エラーを出なくするにはどのようにしたら良いでしょうか?

エラーメッセージ

HTTPステータス 500 - org.hibernate.PropertyValueException: not-null property references a null or transient value : models.Comment.report

servlet

package controller.comments; import java.io.IOException; import java.sql.Date; import java.sql.Timestamp; import java.util.List; import javax.persistence.EntityManager; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import models.Employee; import models.Report; import models.Comment; import models.validators.CommentValidator; import utils.DBUtil; /** * Servlet implementation class CreateCommentServlet */ @WebServlet("/comment/create") public class CreateCommentServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public CreateCommentServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String _token = request.getParameter("_token"); if (_token != null && _token.equals(request.getSession().getId())) { EntityManager em = DBUtil.createEntityManager(); Comment c = new Comment(); Report r = em.find(Report.class, (Integer.parseInt(request.getParameter("report.id")))); c.setReport(r); c.setEmployee((Employee) request.getSession().getAttribute("login_employee")); Date comment_date = new Date(System.currentTimeMillis()); String cd_str = request.getParameter("comment_date"); if (cd_str != null && !cd_str.equals("")) { comment_date = Date.valueOf(request.getParameter("comment_date")); } c.setComment_date(comment_date); c.setContent(request.getParameter("content")); c.setComment_date(Date.valueOf(request.getParameter("comment_date"))); Timestamp currentTime = new Timestamp(System.currentTimeMillis()); c.setCreated_at(currentTime); c.setUpdated_at(currentTime); List<String> errors = CommentValidator.validate(c); if (errors.size() > 0) { em.close(); request.setAttribute("_token", request.getSession().getId()); request.setAttribute("comment", c); request.setAttribute("errors", errors); request.setAttribute("report", r); RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/comment/new.jsp"); rd.forward(request, response); } else { em.getTransaction().begin(); em.persist(c); em.getTransaction().commit(); em.close(); request.getSession().setAttribute("flush", "登録が完了しました。"); response.sendRedirect(request.getContextPath() + "/reports/index"); } } } }

jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <c:import url="/WEB-INF/views/layout/app.jsp"> <c:param name="content"> <h2>コメント作成ページ</h2> <form method="POST" action="<c:url value='/comment/create' />"> <c:import url="_form2.jsp" /> </form> <p><a href="<c:url value='/reports/index' />">一覧に戻る</a></p> </c:param> </c:import>

###_form2

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <c:if test="${errors != null}"> <div id="flush_error"> 入力内容にエラーがあります。<br /> <c:forEach var="error" items="${errors}"> ・<c:out value="${error}" /><br /> </c:forEach> </div> </c:if> <label for="comment_date">日付</label><br /> <input type="date" name="comment_date" value="<fmt:formatDate value='${comment.comment_date}' pattern='yyyy-MM-dd' />" /> <br /><br /> <label for="name">氏名</label><br /> <c:out value="${sessionScope.login_employee.name}" /> <br /><br /> <label for="content">内容</label><br /> <textarea name="content" rows="10" cols="50">${comment.content}</textarea> <br /><br /> <input type="hidden" name="_token" value="${_token}" /> <button type="submit">投稿</button>

model

package models; import java.sql.Date; import java.sql.Timestamp; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.Lob; import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; @Table(name="comments") @NamedQueries({ @NamedQuery( name = "getComments", query = "SELECT c FROM Comment AS c ORDER BY c.id DESC" ), @NamedQuery( name = "getCommentsCount", query = "SELECT COUNT(c) FROM Comment AS c" ), }) @Entity public class Comment { @Id @Column(name="id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @ManyToOne @JoinColumn(name="employee_id", nullable= false ) private Employee employee; @ManyToOne @JoinColumn(name="report_id", nullable= false ) private Report report; @Column(name = "comment_date", nullable = false) private Date comment_date; @Lob @Column(name="content",nullable= false) private String content; @Column(name = "created_at", nullable = false) private Timestamp created_at; @Column(name = "updated_at", nullable = false) private Timestamp updated_at; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Employee getEmployee() { return employee; } public void setEmployee(Employee employee) { this.employee = employee; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public Timestamp getCreated_at() { return created_at; } public void setCreated_at(Timestamp created_at) { this.created_at = created_at; } public Timestamp getUpdated_at() { return updated_at; } public void setUpdated_at(Timestamp updated_at) { this.updated_at = updated_at; } public Date getComment_date() { return comment_date; } public void setComment_date(Date comment_date) { this.comment_date = comment_date; } public Report getReport() { return report; } public void setReport(Report report) { this.report = report; } }

試したこと

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問