QA@IT
«質問へ戻る

27
本文
 MySQK5.5(XAMPP最新版)
 となります。
 
-長くなりますが、まずは全てのコードを貼り付けます。
 
 
-Actionクラスです。
-```
-package gundamTweet.action;
 
-import java.sql.Timestamp;
-import java.text.SimpleDateFormat;
-import java.util.Date;
 
-import gundamTweet.dao.GundamTwitterDao;
-import gundamTweet.entity.GundamTwitter;
-import gundamTweet.form.GundamTweetForm;
-
-import org.seasar.framework.container.S2Container;
-import org.seasar.framework.container.factory.S2ContainerFactory;
-import org.seasar.struts.annotation.Execute;
-
-/**
- * DBに値を受け渡し、投稿時間を操作するメソッド
- * @author 
- *
- */
-public class IndexAction {
-	
-
-	// フォームの設定
-	protected GundamTweetForm gform;
-	
-	// エンティティの設定
-	public GundamTwitter[] list;
-	
-	// daoの設定
-	public GundamTwitterDao dao;
-	
-	// 時間を受け取る変数
-	public String submittime;
-	
-	// フォーマットの変更をする変数を宣言
-	public SimpleDateFormat sdf;
-	
-	// パスの設定
-	private static final String PATH = "dao.dicon";
-	
-	// コンテナを取得する変数を宣言
-	S2Container container;
-	
-	/**
-	 * 投稿時間を付加するメソッド
-	 */
-    @Execute(validator = false)
-	public String index() {
-    	
-    	// コンテナの設定
-    	container = S2ContainerFactory.create(PATH);
-
-    try{
-    		
-    		
-    		// コンポーネントを取得
-    		dao = (GundamTwitterDao)container.getComponent(GundamTwitterDao.class);
-    		
-    		// 現在の時刻を取得
-    		Date currentTime = new Date(System.currentTimeMillis());
-    		
-    		// 現在のミリ秒数を取得
-    		long currentMill = currentTime.getTime();
-    		
-    		/**
-    		 * エンティティクラスのBean達をlistに格納
-    		 */
-    		list = dao.selectAll();
-    		
-    		// 取得したデータベースの件名分ループさせる
-    		for(int i=0; i<list.length; i++){
-    			
-    			// list内のbeanオブジェクトを取得
-    			GundamTwitter beanentity = list[i];
-    			
-    			// 投稿時間のミリ秒数を取得
-    			long submitMill = beanentity.getTime().getTime();
-    			
-    			// 現在のミリ秒と投稿時間のミリ秒差を予め計算しておく
-    			long currentsubMill = currentMill - submitMill;
-    			
-    			// 日数を取得
-				Date after = new Date(submitMill);
-    			
-    			// 投稿時間が1時間以内の場合
-    			if(currentsubMill < 60*60*1000){
-    				
-    				// ミリ秒を分に変換
-    				String minutes = String.valueOf(currentsubMill/(60*1000));
-    				
-    				// 投稿時間に代入
-    				submittime = minutes + "分";
-    			
-	
-    			// 投稿時間が24時間以内の場合
-    			}else if(currentsubMill > 60*60*1000 && currentsubMill < 60*60*1000*24){
-    				
-    				// ミリ秒を時間に変換
-    				String hour = String.valueOf(currentsubMill/(60*60*1000));
-    				
-    				// 投稿時間に代入
-    				submittime = hour + "時間";
-    				
-    			// 投稿時間が24時間より前の場合	
-    			}else if(currentsubMill > 60*60*1000*24 && currentsubMill < 60*60*1000*24*365){
-    				
-    				// 「〇月×日」というフォーマットに変更
-    				sdf = new SimpleDateFormat("MM'月'dd'日'");
-    			
-	
-    				// 変更したフォーマットを代入
-    				submittime = sdf.format(after);
-    			
-    			// 投稿時間が1年以上前の時	
-    			}else{
-    				
-    				// 例「1988/11/12」というフォーマットに変更
-    				sdf = new SimpleDateFormat("yyyy/mm/dd");
-    				
-    				// 変更したフォーマットを代入
-    				submittime = sdf.format(after);
-    			}
-    			
-    			/**
-    			 *  現在時刻との差を表示する投稿時間を
-     			 *  エンティティbeanにセット
-    			 */
-    			beanentity.setSubmittime(submittime);
-    			
-    			// beanを配列に追加
-    			this.list[i] = beanentity;
-    		}
-    		
-    	
-	
-    	}finally{
-    		
-    		/**
-    		 * コンテナの破棄
-    		 */
-    		container.destroy();
-    		
-    	}
-    	
-        return "input.jsp";
-	}
-    
-    
-    /**
-     * 入力されたツイート情報をDBに追加するメソッド
-     * @return ここの処理が終わったら上のindexメソッドに飛びますよ
-     */
-    @Execute(validator = false)
-    public String echo(){
-    	
-    	try{
-    		
-    		// コンテナの設定
-    		container = S2ContainerFactory.create(PATH);
-        	
-        	// コンテナの初期化
-        	container.init();
-    		
-    		// DAOのコンポーネントを取得
-    		dao = (GundamTwitterDao)container.getComponent(GundamTwitterDao.class);
-    	
-	
-    		// beanentityクラスのインスタンス化
-    		GundamTwitter gundamtwitter = new GundamTwitter();
-    		
-    		// インサートする投稿時間をミリ秒で生成
-    		Timestamp timestamp = new Timestamp(System.currentTimeMillis());
-    		
-    		// beanにセット/*ここでエラーが発生しています*/
-    		gundamtwitter.setTweet(gform.tweet);
-    		gundamtwitter.setTime(timestamp);
-    		
-    		
-    		// インサート処理
-    		dao.insert(gundamtwitter);
-    		
-    	}finally{
-    		
-    		// コンテナの破棄
-    		container.destroy();
-    		
-    	}
-    	
-    	// indexメソッドへ
-    	return index();
-    	
-    }
-}
-```
-
-
-Entityクラスです。
-```
-package gundamTweet.entity;
-
-import java.sql.Timestamp;
-
-import org.seasar.dao.annotation.tiger.Bean;
-
-/**
- * エンティティクラス
- * 所謂beanのようなもの
- * @author 
- *
- */
-@Bean(table="gundam_twitter")
-public class GundamTwitter {
-
-//	private Integer id;
-	
-	/**
-	 * DBのカラムによる
-	 * 自動生成
-	 */
-	
-	// ツイート内容
-	private String tweet;
-	
-	// 時間
-	private Timestamp time;
-	
-	// 投稿した時間
-	private String submittime;
-	
-	/*
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}*/
-
-	// ツイートのゲッター
-	public String getTweet() {
-		return tweet;
-	}
-
-	// ツイーとのセッター
-	public void setTweet(String tweet) {
-		this.tweet = tweet;
-	}
-
-	// 時間のゲッター
-	public Timestamp getTime() {
-		return time;
-	}
-
-	// 時間のセッター
-	public void setTime(Timestamp time) {
-		this.time = time;
-	}
-
-	// 投稿時間のゲッター
-	public String getSubmittime() {
-		return submittime;
-	}
-
-	// 投稿時間のセッター
-	public void setSubmittime(String submittime) {
-		this.submittime = submittime;
-	}
-
-}
-
-```
-
-
-DAOクラスです。
-```
-package gundamTweet.dao;
-
-import gundamTweet.entity.GundamTwitter;
-
-import org.seasar.dao.annotation.tiger.Arguments;
-import org.seasar.dao.annotation.tiger.Query;
-import org.seasar.dao.annotation.tiger.S2Dao;
-
-/**
- * 自動生成によるDAOクラス
- * @author 
- *
- */
-@S2Dao(bean=GundamTwitter.class)
-public interface GundamTwitterDao {
-
-	/**
-	 * 降順で20件の最新投稿を表示させる
-	 * 
-	 */
-	@Query("ORDER BY TIME DESC LIMIT 20")
-	public GundamTwitter[] selectAll();
-
-	@Arguments("tweet")/*
-	public GundamTwitter selectById(Integer id);*/
-
-	public int insert(GundamTwitter gundamTwitter);
-
-	/*
-	public int update(GundamTwitter gundamTwitter);
-
-	public int delete(GundamTwitter gundamTwitter);*/
-
-}
-```
-
-
-Formクラスです。
-```
-package gundamTweet.form;
-
-import org.seasar.struts.annotation.ActionForm;
-import org.seasar.struts.annotation.Maxlength;
-import org.seasar.struts.annotation.Required;
-
-/**
- * Formクラス
- * ここの変数に格納してある値をjspで表示させる
- * @author 
- *
- */
-public class GundamTweetForm {
-	
-	
-//	public int id;
-	
-	/**
-	 * ツイートされた内容を格納
-	 * 最大値は100文字まで
-	 */
-	@ActionForm
-	@Required
-	@Maxlength(maxlength=100)
-	public String tweet;
-
-
-}
-```
-
-表示するjspです
-```
-<%@ page language="java" contentType="text/html; charset=UTF-8"
-    pageEncoding="UTF-8"%>
-<!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>ツイート画面</title>
-<SCRIPT TYPE="text/javascript" src="./js/function.js"></SCRIPT>
-</head>
-<body>
-	<form action="echo" method="post" name="theform" onSubmit="return check();">
-	<textarea name="tweet" cols="50" rows="4" onkeyup="strlength(value)"></textarea>
-    <input type="submit" value="ツイート">
-    </form>
-  <div id="idStrlength">あと100文字</div>
-  
-  <div style="width:500px; word-wrap:break-word;" >
-
-  <c:if test="${!empty list}">
-
-	<c:forEach items ="${list}" var ="item">
-
-	<pre>${f:h(item.tweet)} ${f:h(item.submittime)}</pre>
-
-   </c:forEach>
-
-  </c:if>
-  </div>
-  </body>
-</html>
-
-```
 
 
 エラー内容としては、テキストエリアにツイート内容を記述し、ツイートボタンを押すと、500番のヌルポインターが発生し、Actionクラスのechoメソッドのインサート処理前でエラーが発生します。

DBの設定について

現在フレームワークを用いて、ツイッターのようなものを作成しています。
スクショを取り忘れたので口頭での説明になってしまいますが、画面は1画面のみ。
ツイートする内容を記述するテキストエリアがあり、その下に「"ツイート文" 2分」
のように、ツイートした内容と投稿時間が表示される、というものです。

環境は、
Windows7
eclipce3.6
Java3.6
Tomcat7.0
Seasar2(SAStruts,S2Dao)
MySQK5.5(XAMPP最新版)
となります。

エラー内容としては、テキストエリアにツイート内容を記述し、ツイートボタンを押すと、500番のヌルポインターが発生し、Actionクラスのechoメソッドのインサート処理前でエラーが発生します。

現在までで確認している事は、eclipceのDBビュワーから、現在使用しているテーブルである「gundam_twitter」に「ツイート文・投稿時間(所謂手動でのインサート)」を入力すると、jsp初期表示時にはそのツイート内容と投稿時間は正しく表示されるので、コードが劇的に間違っている、と言う事は考え難いです。もう1つの懸念事項として、DBの設定です。

当初テーブル内容として、


CREAT TABET GUNDAM_TWITTER(
ID NUMBER(3),
TWEET VARCHAR(200),
TIME TIMESTAMP,
SUBMITTIME VARCHAR(300),
Primary Key(id)
);

という風に設定し、DAOとEntityを自動生成しました。

しかしその後、わざわざIDを記述する必要はないだろうと思い、


CREAT TABET GUNDAM_TWITTER(
TWEET VARCHAR(200),
TIME TIMESTAMP,
Primary Key(TWEET)
);

のように変更しました。
oracleのテーブル作成とごっちゃになっているかもしれません。申し訳ありません。

このテーブル作成の時のカラムの値や設定が間違っている可能性の方が高いのですが、自分自身でそれを完全に確かめる事が出来ない、というのが現状です。このテーブル作成でそもそも合っているのか、どなたか教えて頂けないでしょうか?よろしくお願い致します。

現在フレームワークを用いて、ツイッターのようなものを作成しています。
スクショを取り忘れたので口頭での説明になってしまいますが、画面は1画面のみ。
ツイートする内容を記述するテキストエリアがあり、その下に「"ツイート文" 2分」
のように、ツイートした内容と投稿時間が表示される、というものです。

環境は、
Windows7
eclipce3.6
Java3.6
Tomcat7.0
Seasar2(SAStruts,S2Dao)
MySQK5.5(XAMPP最新版)
となります。







エラー内容としては、テキストエリアにツイート内容を記述し、ツイートボタンを押すと、500番のヌルポインターが発生し、Actionクラスのechoメソッドのインサート処理前でエラーが発生します。

現在までで確認している事は、eclipceのDBビュワーから、現在使用しているテーブルである「gundam_twitter」に「ツイート文・投稿時間(所謂手動でのインサート)」を入力すると、jsp初期表示時にはそのツイート内容と投稿時間は正しく表示されるので、コードが劇的に間違っている、と言う事は考え難いです。もう1つの懸念事項として、DBの設定です。

当初テーブル内容として、

①
CREAT TABET GUNDAM_TWITTER(
ID NUMBER(3),
TWEET VARCHAR(200),
TIME TIMESTAMP,
SUBMITTIME VARCHAR(300),
Primary Key(id)
);

という風に設定し、DAOとEntityを自動生成しました。

しかしその後、わざわざIDを記述する必要はないだろうと思い、

②
CREAT TABET GUNDAM_TWITTER(
TWEET VARCHAR(200),
TIME TIMESTAMP,
Primary Key(TWEET)
);

のように変更しました。
oracleのテーブル作成とごっちゃになっているかもしれません。申し訳ありません。

このテーブル作成の時のカラムの値や設定が間違っている可能性の方が高いのですが、自分自身でそれを完全に確かめる事が出来ない、というのが現状です。このテーブル作成でそもそも合っているのか、どなたか教えて頂けないでしょうか?よろしくお願い致します。

質問を投稿

DBの設定について

現在フレームワークを用いて、ツイッターのようなものを作成しています。
スクショを取り忘れたので口頭での説明になってしまいますが、画面は1画面のみ。
ツイートする内容を記述するテキストエリアがあり、その下に「"ツイート文" 2分」
のように、ツイートした内容と投稿時間が表示される、というものです。

環境は、
Windows7
eclipce3.6
Java3.6
Tomcat7.0
Seasar2(SAStruts,S2Dao)
MySQK5.5(XAMPP最新版)
となります。

長くなりますが、まずは全てのコードを貼り付けます。

Actionクラスです。

package gundamTweet.action;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;

import gundamTweet.dao.GundamTwitterDao;
import gundamTweet.entity.GundamTwitter;
import gundamTweet.form.GundamTweetForm;

import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.S2ContainerFactory;
import org.seasar.struts.annotation.Execute;

/**
 * DBに値を受け渡し、投稿時間を操作するメソッド
 * @author 
 *
 */
public class IndexAction {


    // フォームの設定
    protected GundamTweetForm gform;

    // エンティティの設定
    public GundamTwitter[] list;

    // daoの設定
    public GundamTwitterDao dao;

    // 時間を受け取る変数
    public String submittime;

    // フォーマットの変更をする変数を宣言
    public SimpleDateFormat sdf;

    // パスの設定
    private static final String PATH = "dao.dicon";

    // コンテナを取得する変数を宣言
    S2Container container;

    /**
     * 投稿時間を付加するメソッド
     */
    @Execute(validator = false)
    public String index() {

        // コンテナの設定
        container = S2ContainerFactory.create(PATH);

    try{


            // コンポーネントを取得
            dao = (GundamTwitterDao)container.getComponent(GundamTwitterDao.class);

            // 現在の時刻を取得
            Date currentTime = new Date(System.currentTimeMillis());

            // 現在のミリ秒数を取得
            long currentMill = currentTime.getTime();

            /**
             * エンティティクラスのBean達をlistに格納
             */
            list = dao.selectAll();

            // 取得したデータベースの件名分ループさせる
            for(int i=0; i<list.length; i++){

                // list内のbeanオブジェクトを取得
                GundamTwitter beanentity = list[i];

                // 投稿時間のミリ秒数を取得
                long submitMill = beanentity.getTime().getTime();

                // 現在のミリ秒と投稿時間のミリ秒差を予め計算しておく
                long currentsubMill = currentMill - submitMill;

                // 日数を取得
                Date after = new Date(submitMill);

                // 投稿時間が1時間以内の場合
                if(currentsubMill < 60*60*1000){

                    // ミリ秒を分に変換
                    String minutes = String.valueOf(currentsubMill/(60*1000));

                    // 投稿時間に代入
                    submittime = minutes + "分";


                // 投稿時間が24時間以内の場合
                }else if(currentsubMill > 60*60*1000 && currentsubMill < 60*60*1000*24){

                    // ミリ秒を時間に変換
                    String hour = String.valueOf(currentsubMill/(60*60*1000));

                    // 投稿時間に代入
                    submittime = hour + "時間";

                // 投稿時間が24時間より前の場合    
                }else if(currentsubMill > 60*60*1000*24 && currentsubMill < 60*60*1000*24*365){

                    // 「〇月×日」というフォーマットに変更
                    sdf = new SimpleDateFormat("MM'月'dd'日'");


                    // 変更したフォーマットを代入
                    submittime = sdf.format(after);

                // 投稿時間が1年以上前の時   
                }else{

                    // 例「1988/11/12」というフォーマットに変更
                    sdf = new SimpleDateFormat("yyyy/mm/dd");

                    // 変更したフォーマットを代入
                    submittime = sdf.format(after);
                }

                /**
                 *  現在時刻との差を表示する投稿時間を
                 *  エンティティbeanにセット
                 */
                beanentity.setSubmittime(submittime);

                // beanを配列に追加
                this.list[i] = beanentity;
            }



        }finally{

            /**
             * コンテナの破棄
             */
            container.destroy();

        }

        return "input.jsp";
    }


    /**
     * 入力されたツイート情報をDBに追加するメソッド
     * @return ここの処理が終わったら上のindexメソッドに飛びますよ
     */
    @Execute(validator = false)
    public String echo(){

        try{

            // コンテナの設定
            container = S2ContainerFactory.create(PATH);

            // コンテナの初期化
            container.init();

            // DAOのコンポーネントを取得
            dao = (GundamTwitterDao)container.getComponent(GundamTwitterDao.class);


            // beanentityクラスのインスタンス化
            GundamTwitter gundamtwitter = new GundamTwitter();

            // インサートする投稿時間をミリ秒で生成
            Timestamp timestamp = new Timestamp(System.currentTimeMillis());

            // beanにセット/*ここでエラーが発生しています*/
            gundamtwitter.setTweet(gform.tweet);
            gundamtwitter.setTime(timestamp);


            // インサート処理
            dao.insert(gundamtwitter);

        }finally{

            // コンテナの破棄
            container.destroy();

        }

        // indexメソッドへ
        return index();

    }
}

Entityクラスです。

package gundamTweet.entity;

import java.sql.Timestamp;

import org.seasar.dao.annotation.tiger.Bean;

/**
 * エンティティクラス
 * 所謂beanのようなもの
 * @author 
 *
 */
@Bean(table="gundam_twitter")
public class GundamTwitter {

//  private Integer id;

    /**
     * DBのカラムによる
     * 自動生成
     */

    // ツイート内容
    private String tweet;

    // 時間
    private Timestamp time;

    // 投稿した時間
    private String submittime;

    /*
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }*/

    // ツイートのゲッター
    public String getTweet() {
        return tweet;
    }

    // ツイーとのセッター
    public void setTweet(String tweet) {
        this.tweet = tweet;
    }

    // 時間のゲッター
    public Timestamp getTime() {
        return time;
    }

    // 時間のセッター
    public void setTime(Timestamp time) {
        this.time = time;
    }

    // 投稿時間のゲッター
    public String getSubmittime() {
        return submittime;
    }

    // 投稿時間のセッター
    public void setSubmittime(String submittime) {
        this.submittime = submittime;
    }

}

DAOクラスです。

package gundamTweet.dao;

import gundamTweet.entity.GundamTwitter;

import org.seasar.dao.annotation.tiger.Arguments;
import org.seasar.dao.annotation.tiger.Query;
import org.seasar.dao.annotation.tiger.S2Dao;

/**
 * 自動生成によるDAOクラス
 * @author 
 *
 */
@S2Dao(bean=GundamTwitter.class)
public interface GundamTwitterDao {

    /**
     * 降順で20件の最新投稿を表示させる
     * 
     */
    @Query("ORDER BY TIME DESC LIMIT 20")
    public GundamTwitter[] selectAll();

    @Arguments("tweet")/*
    public GundamTwitter selectById(Integer id);*/

    public int insert(GundamTwitter gundamTwitter);

    /*
    public int update(GundamTwitter gundamTwitter);

    public int delete(GundamTwitter gundamTwitter);*/

}

Formクラスです。

package gundamTweet.form;

import org.seasar.struts.annotation.ActionForm;
import org.seasar.struts.annotation.Maxlength;
import org.seasar.struts.annotation.Required;

/**
 * Formクラス
 * ここの変数に格納してある値をjspで表示させる
 * @author 
 *
 */
public class GundamTweetForm {


//  public int id;

    /**
     * ツイートされた内容を格納
     * 最大値は100文字まで
     */
    @ActionForm
    @Required
    @Maxlength(maxlength=100)
    public String tweet;


}

表示するjspです

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>ツイート画面</title>
<SCRIPT TYPE="text/javascript" src="./js/function.js"></SCRIPT>
</head>
<body>
    <form action="echo" method="post" name="theform" onSubmit="return check();">
    <textarea name="tweet" cols="50" rows="4" onkeyup="strlength(value)"></textarea>
    <input type="submit" value="ツイート">
    </form>
  <div id="idStrlength">あと100文字</div>

  <div style="width:500px; word-wrap:break-word;" >

  <c:if test="${!empty list}">

    <c:forEach items ="${list}" var ="item">

    <pre>${f:h(item.tweet)} ${f:h(item.submittime)}</pre>

   </c:forEach>

  </c:if>
  </div>
  </body>
</html>

エラー内容としては、テキストエリアにツイート内容を記述し、ツイートボタンを押すと、500番のヌルポインターが発生し、Actionクラスのechoメソッドのインサート処理前でエラーが発生します。

現在までで確認している事は、eclipceのDBビュワーから、現在使用しているテーブルである「gundam_twitter」に「ツイート文・投稿時間(所謂手動でのインサート)」を入力すると、jsp初期表示時にはそのツイート内容と投稿時間は正しく表示されるので、コードが劇的に間違っている、と言う事は考え難いです。もう1つの懸念事項として、DBの設定です。

当初テーブル内容として、


CREAT TABET GUNDAM_TWITTER(
ID NUMBER(3),
TWEET VARCHAR(200),
TIME TIMESTAMP,
SUBMITTIME VARCHAR(300),
Primary Key(id)
);

という風に設定し、DAOとEntityを自動生成しました。

しかしその後、わざわざIDを記述する必要はないだろうと思い、


CREAT TABET GUNDAM_TWITTER(
TWEET VARCHAR(200),
TIME TIMESTAMP,
Primary Key(TWEET)
);

のように変更しました。
oracleのテーブル作成とごっちゃになっているかもしれません。申し訳ありません。

このテーブル作成の時のカラムの値や設定が間違っている可能性の方が高いのですが、自分自身でそれを完全に確かめる事が出来ない、というのが現状です。このテーブル作成でそもそも合っているのか、どなたか教えて頂けないでしょうか?よろしくお願い致します。

現在フレームワークを用いて、ツイッターのようなものを作成しています。
スクショを取り忘れたので口頭での説明になってしまいますが、画面は1画面のみ。
ツイートする内容を記述するテキストエリアがあり、その下に「"ツイート文" 2分」
のように、ツイートした内容と投稿時間が表示される、というものです。

環境は、
Windows7
eclipce3.6
Java3.6
Tomcat7.0
Seasar2(SAStruts,S2Dao)
MySQK5.5(XAMPP最新版)
となります。

長くなりますが、まずは全てのコードを貼り付けます。


Actionクラスです。
```
package gundamTweet.action;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;

import gundamTweet.dao.GundamTwitterDao;
import gundamTweet.entity.GundamTwitter;
import gundamTweet.form.GundamTweetForm;

import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.S2ContainerFactory;
import org.seasar.struts.annotation.Execute;

/**
 * DBに値を受け渡し、投稿時間を操作するメソッド
 * @author 
 *
 */
public class IndexAction {
	

	// フォームの設定
	protected GundamTweetForm gform;
	
	// エンティティの設定
	public GundamTwitter[] list;
	
	// daoの設定
	public GundamTwitterDao dao;
	
	// 時間を受け取る変数
	public String submittime;
	
	// フォーマットの変更をする変数を宣言
	public SimpleDateFormat sdf;
	
	// パスの設定
	private static final String PATH = "dao.dicon";
	
	// コンテナを取得する変数を宣言
	S2Container container;
	
	/**
	 * 投稿時間を付加するメソッド
	 */
    @Execute(validator = false)
	public String index() {
    	
    	// コンテナの設定
    	container = S2ContainerFactory.create(PATH);

    try{
    		
    		
    		// コンポーネントを取得
    		dao = (GundamTwitterDao)container.getComponent(GundamTwitterDao.class);
    		
    		// 現在の時刻を取得
    		Date currentTime = new Date(System.currentTimeMillis());
    		
    		// 現在のミリ秒数を取得
    		long currentMill = currentTime.getTime();
    		
    		/**
    		 * エンティティクラスのBean達をlistに格納
    		 */
    		list = dao.selectAll();
    		
    		// 取得したデータベースの件名分ループさせる
    		for(int i=0; i<list.length; i++){
    			
    			// list内のbeanオブジェクトを取得
    			GundamTwitter beanentity = list[i];
    			
    			// 投稿時間のミリ秒数を取得
    			long submitMill = beanentity.getTime().getTime();
    			
    			// 現在のミリ秒と投稿時間のミリ秒差を予め計算しておく
    			long currentsubMill = currentMill - submitMill;
    			
    			// 日数を取得
				Date after = new Date(submitMill);
    			
    			// 投稿時間が1時間以内の場合
    			if(currentsubMill < 60*60*1000){
    				
    				// ミリ秒を分に変換
    				String minutes = String.valueOf(currentsubMill/(60*1000));
    				
    				// 投稿時間に代入
    				submittime = minutes + "分";
    			
	
    			// 投稿時間が24時間以内の場合
    			}else if(currentsubMill > 60*60*1000 && currentsubMill < 60*60*1000*24){
    				
    				// ミリ秒を時間に変換
    				String hour = String.valueOf(currentsubMill/(60*60*1000));
    				
    				// 投稿時間に代入
    				submittime = hour + "時間";
    				
    			// 投稿時間が24時間より前の場合	
    			}else if(currentsubMill > 60*60*1000*24 && currentsubMill < 60*60*1000*24*365){
    				
    				// 「〇月×日」というフォーマットに変更
    				sdf = new SimpleDateFormat("MM'月'dd'日'");
    			
	
    				// 変更したフォーマットを代入
    				submittime = sdf.format(after);
    			
    			// 投稿時間が1年以上前の時	
    			}else{
    				
    				// 例「1988/11/12」というフォーマットに変更
    				sdf = new SimpleDateFormat("yyyy/mm/dd");
    				
    				// 変更したフォーマットを代入
    				submittime = sdf.format(after);
    			}
    			
    			/**
    			 *  現在時刻との差を表示する投稿時間を
     			 *  エンティティbeanにセット
    			 */
    			beanentity.setSubmittime(submittime);
    			
    			// beanを配列に追加
    			this.list[i] = beanentity;
    		}
    		
    	
	
    	}finally{
    		
    		/**
    		 * コンテナの破棄
    		 */
    		container.destroy();
    		
    	}
    	
        return "input.jsp";
	}
    
    
    /**
     * 入力されたツイート情報をDBに追加するメソッド
     * @return ここの処理が終わったら上のindexメソッドに飛びますよ
     */
    @Execute(validator = false)
    public String echo(){
    	
    	try{
    		
    		// コンテナの設定
    		container = S2ContainerFactory.create(PATH);
        	
        	// コンテナの初期化
        	container.init();
    		
    		// DAOのコンポーネントを取得
    		dao = (GundamTwitterDao)container.getComponent(GundamTwitterDao.class);
    	
	
    		// beanentityクラスのインスタンス化
    		GundamTwitter gundamtwitter = new GundamTwitter();
    		
    		// インサートする投稿時間をミリ秒で生成
    		Timestamp timestamp = new Timestamp(System.currentTimeMillis());
    		
    		// beanにセット/*ここでエラーが発生しています*/
    		gundamtwitter.setTweet(gform.tweet);
    		gundamtwitter.setTime(timestamp);
    		
    		
    		// インサート処理
    		dao.insert(gundamtwitter);
    		
    	}finally{
    		
    		// コンテナの破棄
    		container.destroy();
    		
    	}
    	
    	// indexメソッドへ
    	return index();
    	
    }
}
```


Entityクラスです。
```
package gundamTweet.entity;

import java.sql.Timestamp;

import org.seasar.dao.annotation.tiger.Bean;

/**
 * エンティティクラス
 * 所謂beanのようなもの
 * @author 
 *
 */
@Bean(table="gundam_twitter")
public class GundamTwitter {

//	private Integer id;
	
	/**
	 * DBのカラムによる
	 * 自動生成
	 */
	
	// ツイート内容
	private String tweet;
	
	// 時間
	private Timestamp time;
	
	// 投稿した時間
	private String submittime;
	
	/*
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}*/

	// ツイートのゲッター
	public String getTweet() {
		return tweet;
	}

	// ツイーとのセッター
	public void setTweet(String tweet) {
		this.tweet = tweet;
	}

	// 時間のゲッター
	public Timestamp getTime() {
		return time;
	}

	// 時間のセッター
	public void setTime(Timestamp time) {
		this.time = time;
	}

	// 投稿時間のゲッター
	public String getSubmittime() {
		return submittime;
	}

	// 投稿時間のセッター
	public void setSubmittime(String submittime) {
		this.submittime = submittime;
	}

}

```


DAOクラスです。
```
package gundamTweet.dao;

import gundamTweet.entity.GundamTwitter;

import org.seasar.dao.annotation.tiger.Arguments;
import org.seasar.dao.annotation.tiger.Query;
import org.seasar.dao.annotation.tiger.S2Dao;

/**
 * 自動生成によるDAOクラス
 * @author 
 *
 */
@S2Dao(bean=GundamTwitter.class)
public interface GundamTwitterDao {

	/**
	 * 降順で20件の最新投稿を表示させる
	 * 
	 */
	@Query("ORDER BY TIME DESC LIMIT 20")
	public GundamTwitter[] selectAll();

	@Arguments("tweet")/*
	public GundamTwitter selectById(Integer id);*/

	public int insert(GundamTwitter gundamTwitter);

	/*
	public int update(GundamTwitter gundamTwitter);

	public int delete(GundamTwitter gundamTwitter);*/

}
```


Formクラスです。
```
package gundamTweet.form;

import org.seasar.struts.annotation.ActionForm;
import org.seasar.struts.annotation.Maxlength;
import org.seasar.struts.annotation.Required;

/**
 * Formクラス
 * ここの変数に格納してある値をjspで表示させる
 * @author 
 *
 */
public class GundamTweetForm {
	
	
//	public int id;
	
	/**
	 * ツイートされた内容を格納
	 * 最大値は100文字まで
	 */
	@ActionForm
	@Required
	@Maxlength(maxlength=100)
	public String tweet;


}
```

表示するjspです
```
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>ツイート画面</title>
<SCRIPT TYPE="text/javascript" src="./js/function.js"></SCRIPT>
</head>
<body>
	<form action="echo" method="post" name="theform" onSubmit="return check();">
	<textarea name="tweet" cols="50" rows="4" onkeyup="strlength(value)"></textarea>
    <input type="submit" value="ツイート">
    </form>
  <div id="idStrlength">あと100文字</div>
  
  <div style="width:500px; word-wrap:break-word;" >

  <c:if test="${!empty list}">

	<c:forEach items ="${list}" var ="item">

	<pre>${f:h(item.tweet)} ${f:h(item.submittime)}</pre>

   </c:forEach>

  </c:if>
  </div>
  </body>
</html>

```


エラー内容としては、テキストエリアにツイート内容を記述し、ツイートボタンを押すと、500番のヌルポインターが発生し、Actionクラスのechoメソッドのインサート処理前でエラーが発生します。

現在までで確認している事は、eclipceのDBビュワーから、現在使用しているテーブルである「gundam_twitter」に「ツイート文・投稿時間(所謂手動でのインサート)」を入力すると、jsp初期表示時にはそのツイート内容と投稿時間は正しく表示されるので、コードが劇的に間違っている、と言う事は考え難いです。もう1つの懸念事項として、DBの設定です。

当初テーブル内容として、

①
CREAT TABET GUNDAM_TWITTER(
ID NUMBER(3),
TWEET VARCHAR(200),
TIME TIMESTAMP,
SUBMITTIME VARCHAR(300),
Primary Key(id)
);

という風に設定し、DAOとEntityを自動生成しました。

しかしその後、わざわざIDを記述する必要はないだろうと思い、

②
CREAT TABET GUNDAM_TWITTER(
TWEET VARCHAR(200),
TIME TIMESTAMP,
Primary Key(TWEET)
);

のように変更しました。
oracleのテーブル作成とごっちゃになっているかもしれません。申し訳ありません。

このテーブル作成の時のカラムの値や設定が間違っている可能性の方が高いのですが、自分自身でそれを完全に確かめる事が出来ない、というのが現状です。このテーブル作成でそもそも合っているのか、どなたか教えて頂けないでしょうか?よろしくお願い致します。