[220126]プロジェクト3日目


ルームリストの作成



使用するファイル
Model - SpringVO.java , SpringDAO.java , SpringDAO_SpringImpl.javaView - view_list.jspController - CtrlTest.java設計にはbootstrapとcssを用いた.

テーブルの作成

CREATE TABLE micro_T(
    no INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    content VARCHAR(500)
);

Model


SpringVO.java

  • Property宣言(メンバー変数+getter+setter)
  • SpringDAO.java

  • インタフェース
  • データベースのデータを処理する方法の作成
  • public List findAll() throws Exception;
  • public int add( SpringVO pvo ) throws Exception;
  • public int del( SpringVO pvo ) throws Exception;
  • SpringDAO_SpringImpl.java

  • implements SpringDAO
  • SpringDAOの方法
  • をカバーする
        @Override
        public List<SpringVO> findAll() throws Exception {
            RowMapper<SpringVO> rm = new RowMapper<SpringVO>() {
                @Override
                public SpringVO mapRow(ResultSet rs, int arg1) throws SQLException {
                    SpringVO vo = new SpringVO();
                    vo.setNo( rs.getInt("no") );
                    vo.setContent( rs.getString("content") );
                    return vo;
                }
            };
            List<SpringVO> rl = jdbcTemplate.query("SELECT * FROM micro_T", rm);
            return rl;
        } 
        @Override
        public int add(SpringVO pvo) throws Exception {
            int uc = 0;
            PreparedStatementSetter pss = new PreparedStatementSetter() {
                @Override
                public void setValues(PreparedStatement stmt) throws SQLException {
      		// 한글문제를 해결하기위해 따로 함수를 만들어 사용. Controller 부분에서 설명한다.
                    stmt.setString( 1, Util.han(pvo.getContent()) );
                }
            };
            jdbcTemplate.update("INSERT INTO micro_T VALUES(default, ?)",  pss );
            return uc;
        }
        @Override
        public int del(SpringVO pvo) throws Exception {
            int uc = 0;
            PreparedStatementSetter pss = new PreparedStatementSetter() {
                @Override
                public void setValues(PreparedStatement stmt) throws SQLException {
                    stmt.setInt( 1, pvo.getNo() );
                }
            };
            jdbcTemplate.update("DELETE FROM micro_T WHERE no=?",  pss );
            return uc;
        }

    Controller


    CtrlTest

    @Controller
    public class CtrlTest
    クラス名の上に@Controllerを指定

    表の内容のインポート

        @RequestMapping("/bangmyung.do")
        public ModelAndView list() throws Exception {
            List<SpringVO> rl = springDao.findAll();
            ModelAndView mnv = new ModelAndView();
            mnv.setViewName("view_list");
            mnv.addObject("list", rl);
            return mnv;
        }
    view_list.jspに転送すると、表の内容をリストに入れて一緒に情報を送信する.

    テキストボックスの内容をテーブルに配置

        @RequestMapping("/add.do")
        public String add( @ModelAttribute SpringVO vo ) throws Exception {    
            if( vo.getContent() == null || vo.getContent().equals("") ) {
                return "redirect:bangmyung.do?ecode=invalid_content";
            }
            else {
                springDao.add( vo );
                return "redirect:bangmyung.do";
            }
        }
    POST方式でtextareaのコンテンツを受信して@ModelAttributeにしようとしたが、ハングルが破壊され、問題解決に時間がかかった.
        public static String han( String a ) {
            try {
                byte[] bs = a.getBytes("8859_1");
                a = new String( bs, "utf-8" );
            }
            catch( IOException e ) {}
            return a;
        }
    さらに、add()メソッドでINSERTに使用される関数が作成されました.

    削除ボタンをクリックして削除

    @RequestMapping("/del.do")
    public String del( @ModelAttribute SpringVO vo ) throws Exception {
            springDao.del( vo );
            return "redirect:bangmyung.do";
    }

    View


    view_list.jsp


    EL実装テーブルを使用

    <table class="table table-hover table-bordered table-striped">
            <thead>
                <tr>
                    <th style="width:15%">번호</th>
                    <th>내용</th>
                    <th style="width:15%">삭제</th>
                </tr>
            </thead>
        
            <q:forEach items="${list}" var="t">
                <tr>
                    <td><span>${t.no}</span></td>
                    <td><span>${t.content}</span></td>
                    <!-- X 를 누르면 /del.do 로 이동한다. ( CtrlTest의 del() 함수 호출) -->
                    <td><a href="del.do?no=${t.no}">X</a></td>
                </tr>
            </q:forEach>
        </table>

    formタグを使用してテキストボックスとコミットボタンを実装

        <form method="POST" action="add.do">
            <div class="form-group">
                <label for="abcd">내용을 적어주세요</label>
                <textarea id="abcd" class="form-control bana" name="content" rows="5"></textarea>
            </div>
            <div class="form-group" style="margin-bottom:20px">
                <input class="form-control bana nana" type="submit"/>
            </div>
        </form>
    設計で使用したコードは単独でアップロードされません.