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

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

新規登録して質問してみよう
ただいま回答率
85.50%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

1回答

2320閲覧

servlet JSPで設定したチェックボックスの判定をしてプレビューに文字列を返したい

roro_mochi

総合スコア48

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2020/07/09 08:39

編集2020/07/09 09:32

お世話になります。

現在、JSP/servlet(bean)を学習しているのですが、JSP側に設定したチェックボックスの判定が
クライアントに返ってこない状況です。(しないが返ってくる)

デフォルト値を設定してみましたが、どうやら③アクションの戻り値が画面に返ってきているようでした。
(== null にすると「する」が戻ってくるため)

  • チェックされていたら、プレビュー画面に「する」
  • チェックされていなければ、プレビュー画面に「しない」

を返すにはどこを修正したらよいでしょうか。
よろしくお願いいたします。

java

1 2//①Beanの設定 3 private Boolean setPrc; 4 5 public Boolean getSetPrc() { 6 return setPrc; 7 } 8 9 public void setSetPrc(Boolean setPrc) { 10 this.setPrc = setPrc; 11 }

JSP

1//②チェックボックス画面 2 <s:text name="label.prc"></s:text> // タイトルを表示 3   // チェックされたら「する」「しない」をプレビュー画面に表示 4 <input name="bbsBean.setPrc" id="ac-check1" class="ac-check" type="checkbox">

java

1//③アクション 2protected void processForDisplay { 3 // 練習日が設定されたら「する」「しない」をプレビュー画面に表示 4 if (bbsBean.getSetPrc() != null) { 5 setPrc = getText("label.infoTrue"); //する(プロパティファイルに設定) 6 } else { 7 setPrc = getText("label.infoFalse"); //しない(プロパティファイルに設定) 8 } 9 10 //練習の設定有無を取得する。@return 練習設定有無 11 public String getSetPrc() { 12 return setPrc; 13 } 14 15 //練習の設定有無を設定する。 @param setPrc 練習設定有無 16 17 public void setSetPrc(String setPrc) { 18 this.setPrc = setPrc; 19 } 20}

java

1//プレビュー画面に遷移できるかエラー画面を返すか(ソースは一部割愛) 2 @Action(value = "toPreview", results = { 3 @Result(name = "success", location = "preview.jsp"), 4 @Result(name = "input", location = "previewError.jsp") }) 5

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

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

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

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

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

A-pZ

2020/07/09 09:21

Actionクラスの実装が省略されているので、setPrcの値をどのように格納しているのかを書くと回答が得られるのではないでしょうか。
roro_mochi

2020/07/09 09:32

ご親切にご指摘をいただきありがとうございます。 アクションにset、getを追加いたしました。よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2020/07/13 10:08

アクションクラスの宣言部がおそらく間違えてる。 Spring みたいにパラメーター自動バインドの設定がされてないんだろうな
guest

回答1

0

ベストアンサー

Actionクラスに過不足があるのではないかと思われます。
ActionクラスにてBbsBeanの扱いが書かれていないので憶測になりますが、

java

1import com.github.apz.sample.struts2sample.model.BbsBean; 2import com.opensymphony.xwork2.ActionSupport; 3 4public class BbsAction extends ActionSupport { 5 private BbsBean bbsBean; 6 7 public BbsBean getBbsBean() { 8 return bbsBean; 9 } 10 11 public void setBbsBean(BbsBean bbsBean) { 12 this.bbsBean = bbsBean; 13 } 14 15 public String display() throws Exception { 16 processForDisplay(); 17 return ActionSupport.SUCCESS; 18 } 19 20 private String setPrc; 21 22 public String getSetPrc() { 23 return setPrc; 24 } 25 26 public void setSetPrc(String setPrc) { 27 this.setPrc = setPrc; 28 } 29 30 protected void processForDisplay() { 31 if (bbsBean.getSetPrc() != null) { 32 setPrc = getText("label.infoTrue"); //する(プロパティファイルに設定) 33 } else { 34 setPrc = getText("label.infoFalse"); //しない(プロパティファイルに設定) 35 } 36}

であるとき、

html

1<input name="bbsBean.setPrc" id="ac-check1" class="ac-check" type="checkbox">

で、チェックボックスにチェックが入った場合には、リクエストパラメータに bbsBean.setPrc が空文字で送信されますので、processForDisplay()メソッドを実行したとき、bbsBean.getSetPrc() != null は trueになりますので、setPrc = getText("label.infoTrue"); が実行されます。

しかし未チェックだった場合は、リクエストパラメータに bbsBean.setPrcが送信されないため、bbsBeanがStruts2によって作成されなくなり、bbsBeanがnullになるので、bbsBean.getSetPrc() はNullPointerExceptionをスローするでしょう。

そのため、Struts2では、チェックボックスが未チェックでもパラメータを送信するよう、

html

1<s:checkbox>

が用意されています。

Struts2公式:checkbox tag

投稿2020/07/09 22:29

A-pZ

総合スコア12011

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

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

roro_mochi

2020/07/13 08:09 編集

お返事遅くなりすみません。 土日やってみましたが、うまくいきませんでした。 BbsBeanは以下にセットしたのですが、これだけではないのでしょうか? ------------------------------- //①Beanの設定 private Boolean setPrc; public Boolean getSetPrc() { return setPrc; } public void setSetPrc(Boolean setPrc) { this.setPrc = setPrc; } ------------------------------- 今回はアクションクラスにextends をして、そこで protected BbsBean bbsBean; を作りました。それが取ってこれないのは、 格納の仕方が違うのでしょうか。。
退会済みユーザー

退会済みユーザー

2020/07/13 09:57

Struts2 model とか struts2 Form の検索で出てくる内容ではあるけど、 インターセプターが動く設定がないと request.getParameter で取得及び自前で設定してくださいてなるのよね(不足)
A-pZ

2020/07/18 14:16

@anna_53 さん チェックボックスの値(value)が設定されていないので、booleanにできません。もしbooleanで受け取りたい場合は、<s:checkbox>を利用するか、私が回答のようにStringでいったん受け取るか、<s:checkbox>を使わない場合は、valueにtrueを設定しなければ変換されず、常にfalseになります。
roro_mochi

2020/07/19 05:46

A-pZさん 教えていただいた<s:checkbox>の手順を踏んでいるか昨日、いちから見直しましたところ。。。 大変初歩的なミスをしていることがわかりました。 public void setSetPrc(Boolean setPrc)の部分が public void setSetPrc(Boolean setPr)となっていました。 そのためパラメータ取得ができておらず大変申し訳ございません。 ご親切に詳細を記載いただき大変助かりました。 ありがとうございます。ベストアンサーとさせていただきます。
A-pZ

2020/07/19 07:44

@anna_53 さん なるほど、あるあるですね~
roro_mochi

2020/07/20 08:05

ごめんなさい>< ご親切うれしかったです。
退会済みユーザー

退会済みユーザー

2020/07/20 09:23

そんなとこまでみるのww
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問