

eclipseを使って、apache.wicketの勉強を始めたのですが、サンプルが少なくてよく分かりません。
特にdatabaseを使ったものはほとんどありません。 どなたかご教授して頂けたらありがたいのですが。 (V.1.4.23)


CC BY-SA 3.0
2014-12-25T07:42:41.903
2553
2014-12-27T02:43:51.773
2014-12-25T08:09:16.620
208
5735
question
java framework
apache.wicketでのdatabaseを使ったサンプルを教えて下さい。


## データベースを使用したサンプルについて

JDBCやHibernate等を使用してデータベースにアクセスすることになりますので、想定されているフレームワークを記載されると、より詳細な回答が得られるかもしれません。

Wicket 6ですが、MyBatisを使用した場合のサンプルであれば見つかりました。  
<http://tsukaby.com/tech_blog/archives/81>

## 他のサンプルや資料について

データベースとは直接関係ありませんが、WicketのHPの
[Example](http://wicket.apache.org/learn/examples/) や [User
Guide](http://wicket.apache.org/guide/) 、githubの [wicket-
examples](https://github.com/apache/wicket/tree/master/wicket-examples)
が参考になるかと思います。

## サンプルコード

データベースを使用する際のイメージがつかみやすい様に、Spring + Hibernateを使用した場合のイメージを下記に記載しておきます。(Wicket
v7.0.0-M4 / JDK 1.8)

`userDao.list()`でユーザー一覧をDBから取得して表示し、"add"や"delete"がクリックされた時に`userDao.save()`と`userDao.delete()`でデータベースへ追加・削除を行い画面を更新しています。

何かの参考になれば幸いです。

  * UserPage.html
[code]     <!DOCTYPE html>

    <html xmlns:wicket="http://wicket.apache.org">
      <head>
        <title>Sample</title>
      </head>
      <body>
        <h1>User List</h1>
        <form wicket:id="form">
          <label>name</label>
          <input type="text" wicket:id="name" />
          <label>e-mail</label>
          <input type="email" wicket:id="email" />
          <input type="submit" value="add" wicket:id="addUser" />
        </form>
        <table>
          <thead>
            <tr>
              <td>id</td>
              <td>name</td>
              <td>e-mail</td>
              <td></td>
            </tr>
          </thead>
          <tbody wicket:id="view">
            <tr wicket:id="list">
              <td wicket:id="id"></td>
              <td wicket:id="name"></td>
              <td wicket:id="email"></td>
              <td>
                <a href="#" wicket:id="deleteUser">delete</a>
              </td>
            </tr>
          </tbody>
        </table>
      </body>
    </html>
    
[/code]

  * UserPage.java
[code]     import java.util.List;

    
    import org.apache.wicket.ajax.AjaxRequestTarget;
    import org.apache.wicket.ajax.markup.html.AjaxLink;
    import org.apache.wicket.ajax.markup.html.form.AjaxButton;
    import org.apache.wicket.markup.html.*;
    import org.apache.wicket.markup.html.basic.*;
    import org.apache.wicket.markup.html.form.*;
    import org.apache.wicket.markup.html.list.*;
    import org.apache.wicket.model.CompoundPropertyModel;
    import org.apache.wicket.spring.injection.annot.SpringBean;
    import org.apache.wicket.util.value.ValueMap;
    
    import dao.UserDao;
    import dto.User;
    
    public class UserPage extends WebPage {
        private static final long serialVersionUID = 1L;
    
        @SpringBean
        private UserDao userDao;
    
        public UserPage() {
            final List<User> users = userDao.list();
    
            final WebMarkupContainer view = new WebMarkupContainer("view");
            view.add(
                new PropertyListView<User>("list", users) {
                    private static final long serialVersionUID = 1L;
    
                    @Override
                    protected void populateItem(ListItem<User> item) {
                        item.add(new Label("id"));
                        item.add(new Label("name"));
                        item.add(new Label("email"));
    
                        item.add(new AjaxLink("deleteUser") {
                            private static final long serialVersionUID = 1L;
    
                            @Override
                            public void onClick(AjaxRequestTarget target) {
                                final User u = item.getModelObject();
    
                                userDao.delete(u);
                                users.remove(u);
    
                                target.add(view);
                            }
                        });
                    }
                }
            );
            add(view.setOutputMarkupId(true));
    
            final Form<ValueMap> form = new Form<>("form", new CompoundPropertyModel<>(new ValueMap()));
            form.add(new TextField<String>("name").setType(String.class));
            form.add(new EmailTextField("email"));
            form.add(new AjaxButton("addUser", form) {
                private static final long serialVersionUID = 1L;
    
                @Override
                protected void onSubmit(AjaxRequestTarget target, Form<?> f) {
                    super.onSubmit(target, f);
    
                    final ValueMap values = form.getModelObject();
    
                    final User u = new User();
                    u.setName((String)values.get("name"));
                    u.setEmail((String)values.get("email"));
                    userDao.save(u);
                    users.add(u);
    
                    // Clear input value.
                    values.put("name", "");
                    values.put("email", "");
    
                    // Update view.
                    target.add(view);
                    target.add(form);
                }
            });
            add(form);
        }
    }
    
[/code]

  * User.java
[code]     package dto;

    
    import java.io.Serializable;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table(name="User")
    public class User implements Serializable {
        private static final long serialVersionUID = 1L;
    
        @Id
        @Column(name="id")
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        private Integer id;
        private String name;
        private String email;
    
        public User() {}
    
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    
        public String getEmail() {
            return email;
        }
        public void setEmail(String email) {
            this.email = email;
        }
    
        /* (non-Javadoc)
         * @see java.lang.Object#toString()
         */
        @Override
        public String toString(){
            return "id=" + id + ", name=" + name + ", email=" + email;
        }
    }
    
[/code]


CC BY-SA 3.0
2014-12-26T09:00:43.027
2634
2014-12-27T02:43:51.773
2014-12-27T02:43:51.773
3068
3068
2553
answer