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

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

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

Apache Struts 2は、Apache Strutsプロジェクトにて開発されているオープンソースのJavaベースのWebアプリケーションフレームワークです。Sturts1に比べ、設定ファイルの削減、依存性の注入、POJO等の改善がなされています。

Eclipse

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

Q&A

解決済

1回答

2292閲覧

struts2-archetype-starterで作成したプロジェクトのエラー解消

lupus_dingo

総合スコア257

Struts 2

Apache Struts 2は、Apache Strutsプロジェクトにて開発されているオープンソースのJavaベースのWebアプリケーションフレームワークです。Sturts1に比べ、設定ファイルの削減、依存性の注入、POJO等の改善がなされています。

Eclipse

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

0グッド

0クリップ

投稿2016/03/07 08:35

こんにちは。

こちらの質問は
https://teratail.com/questions/28927
の続きになります。

A-pZさんの参考URLを見ながらstruts2-archetype-starterを
mavenからプロジェクト作成しTomcat8で実行したところ
IndexActionは正常に実行されました。

しかし、index画面からSubmitボタンを押下すると404エラー(クラスが見つからない)で
Apacheの画面になりStruts.xmlの
<action name="helloWorld" class="helloWorldAction">
<result name="input">/jsp/index.jsp</result>
<result>/WEB-INF/jsp/helloWorld.jsp</result>
</action>
をIndexActionに合わせて
<action name="helloWorld" class="local.sample.HelloWorldAction">
<result name="input">/jsp/index.jsp</result>
<result>/WEB-INF/jsp/helloWorld.jsp</result>
</action>
に修正することでクラスがみつからないというエラーは解決しました。

つぎに、同様にindex画面で
パラメータを正常に入力せずにSubmit(HelloWorldActionのexecute)すると
「HTTP????? 404 - /struts2-archetype-starter/jsp/index.jsp」とエラーになりました。

試行錯誤してみると、HelloWorldAction.javaの39行目あたりにある
@RequiredStringValidator(message = "Please enter a name", trim = true)
をコメントアウトすると404エラーにならずに次の画面が表示されることがわかりました。

これらのエラーが、私のプロジェクトの作成方法が間違っているのか、
それともstarterなのであえてエラーのままにしているのかわからないのですが
間違った対応だと思うので正しい対応をご存知でしたら教えてほしいです。

ちなみにその後、ログを見るとvalidateExecuteが見つからないとあったので
メソッドを作ってデバッグしてみるとvalidateExecuteを通過することは確認できたのですが
出力されるエラーは同じ404でした。
public String validateExecute() throws Exception {
this.name="a";
return SUCCESS;
}

正しい動作は、「入力でエラーがあればエラーメッセージをセットして入力画面をリロードする」だと思うのですが、そのような動きにする方法をまず教えていただきたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

xml

1<result name="input">/jsp/index.jsp</result> 2<result>/WEB-INF/jsp/helloWorld.jsp</result>

と書かれていますので、入力チェックに引っかかった場合は、input側、そうでない場合は下側になります。
input側に /WEB-INF/ がついていないのでおそらく見つからない(404 Not found)が出ているのではないでしょうか。

投稿2016/03/07 11:08

A-pZ

総合スコア12011

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

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

lupus_dingo

2016/03/11 15:20 編集

回答ありがとうございます。 上記の問題はご指摘の通りで解決しました。 次から次へと申し訳ありません、今度はDBに接続しようと試みて詰まっています。 struts2-archetype-starterにはDB設定がなかったため、自前でXMLを用意してみたのですがうまく動きません。 具体的には @Autowired private JdbcTemplate jdbcTemplate; と定義したjdbcTemplateにDBのメタ情報(オブジェクト)が設定されるはずのなのですが、デバッグしてみるとNULLのままインスタンスメソッド(queryForList)を実行しようとしているのでヌルポで落ちてしまいます。 1日かけてここまではわかったのですが、XMLのためステップごとのデバッグができず、原因が追えないため、XMLの修正の仕方がわからないです。 applicationContext.xmlには以下の記載があります。 <!-- DB用の設定ファイル --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:database.properties" /> </bean> <!-- DB接続用の設定 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" > <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> <!-- JDBC Template Bean --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource" /> </bean> また、Web.xmlには以下の記載があります。 <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:applicationContext*.xml</param-value> </context-param> database.propertiesには以下の記載があります。 jdbc.driverClassName=org.postgresql.Driver jdbc.url=jdbc:postgresql://localhost:5432/sample jdbc.username=postgres jdbc.password=postgres お手数ですが、アドバイスをお願いしたいです。 わかりづらいようであれば新規に質問を上げます。
lupus_dingo

2016/03/14 06:06

自己解決しました。 以下のようにして、XMLではなくソースに読み込み処理を実装したところDBに接続でき、クエリも正常に実行されました。 この件はクローズさせていただきます。 ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); this.dataSource = (DataSource)context.getBean("dataSource"); jdbcTemplate = new JdbcTemplate(this.dataSource);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問