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

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

ただいまの
回答率

89.98%

Struts2 ModelDrivenについて

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,780

cray

score 27

ModelDrivenを使用するプログラムを作成しています。

http://codezine.jp/article/detail/4060?p=2

こちらのサイトを参考に作成しているのですが、
テキストフィールドに値を入力し、登録ボタンを押しても次の画面では変数に値が入っていない状態になっていて、
変数の値を表示できません。

以下ソースコードを記載します。

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>BooksSample</display-name>

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

</web-app>

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
    "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="false" />
</struts>

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC
 "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello!Project</title>
</head>
<body>
<a href="books.action">sumple</a><br />
</body>
</html>

BooksAction.java

package books.action;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class BooksAction extends ActionSupport implements ModelDriven<BooksModel>{


    private BooksModel model = new BooksModel();
    @Override
    public BooksModel getModel() {
        return model;
    }

    @Action(
            value = "/books",
            results = {
                 @Result(name = "success", location = "booksInput1.jsp")
            }
        )
        public String execute() throws Exception {
            return "success";
        }

    @Action(
            value = "/result",
            results = {
                 @Result(name = "success", location = "booksResult1.jsp")
            }
        )
        public String result() throws Exception {
            return "success";
        }

    @Action(
            value = "/register",
            results = {
                @Result(name = "success", location = "booksRegister.jsp")
            }
        )
        public String register() throws Exception {
            return "success";
        }

}

BooksModel.java

package books.action;

import java.io.Serializable;

public class BooksModel implements Serializable{
    private String isbn;   // ISBN
    private String title;  // 書名
    private String author; // 作者名
    public String getIsbn() {
        return isbn;
    }
    public void setIsbn(String isbn) {
        this.isbn = isbn;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
}

booksInput1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Input</title></head>
<body>
<s:textfield name="title" label="書名" /><br/>
<s:textfield name="author" label="著者" /><br/>
<s:textfield name="isbn" label="ISBN" /><br/>
<a href="<s:url action="result"/>">登録</a>
<s:debug />
</body>
</html>

booksResult1.jsp

<%@ page language="java" contentType="text/html; charset=Windows-31J"
pageEncoding="Windows-31J"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>確認</title>
</head>
<body>
<s:property value="title" /><br/>
<s:property value="author" /><br/>
<s:property value="isbn" /><br/>
<a href="<s:url action="register"/>">登録実行</a>
<s:debug />
</body>

booksInput.jspの画面で値を入力し、登録を押して
booksResult.jspに画面遷移します。
その際に入力された値を表示させたいのですが、値が消えてしまって表示できません。
原因は何でしょうか。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • asahina_dev

    2016/07/29 12:58

    https://teratail.com/questions/42524 でもいわれたとおもうけど struts.xml

    キャンセル

  • asahina_dev

    2016/07/29 13:06

    ミス

    キャンセル

  • cray

    2016/07/29 13:06

    struts.xmlを修正いたしました。

    キャンセル

回答 1

checkベストアンサー

+1

<a href="<s:url action="result"/>">登録</a>

ただのリンクだから値が渡りません。

もともとのサンプルの

<s:form action="books" >
<s:textfield name="title" label="書名" />
<s:textfield name="author" label="著者" />
<s:textfield name="isbn" label="ISBN" />
<s:submit />
</s:form>

 

から変更したからでしょうね

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/07/29 13:28

    ご回答ありがとうございます!リンクではなくsubmitを使えばよかったのですね!解決しました!ありがとうございました!

    キャンセル

  • 2016/07/29 13:30

    ちなみに
    http://codezine.jp/article/download/1646
    から その記事でつかっているダウンロードが可能なのはしってますか

    キャンセル

  • 2016/07/29 13:48

    知りませんでした。記事のコードが一部抜粋ばかりで困っていたのですがダウンロードできたのですね!他の記事もダウンロードできるみたいで、とても助かりました!
    わざわざ教えていただき、ありがとうございました!

    キャンセル

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

  • ただいまの回答率 89.98%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる