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

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

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

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

Java

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

Struts 2

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

Q&A

解決済

2回答

9496閲覧

selectタグのoptionをDBから取得し、表示したい

Takki

総合スコア16

JSP

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

Java

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

Struts 2

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

0グッド

0クリップ

投稿2018/10/11 00:27

編集2018/10/11 03:02

前提・実現したいこと

javaとstruts2を使用し、
selectタグの選択肢にデータベースから取得したものを表示するプログラムを作成してるところですが、
文字列の表示がうまくいきません。
データベースにある文字列をそのまま表示するためにはどのようにしたらいいでしょうか?

発生している問題・エラーメッセージ

プルダウンの中に「dto.BranchDto@62d5d70」のように参照先(?)が表示される。

該当のソースコード

【DTO】支店名を保持
public class BranchDto {
private String name;
public String getName() {return name;}
public void setName(String name) {this.name = name;}
}

【DAO】支店名をDBから取得し、DTOに格納
public List<BranchDto> getBranchName(){
DBConnector db =new DBConnector();
Connection conn = db.getConn();
List<BranchDto> branchList = new ArrayList<BranchDto>();
String sql = "SELECT BranchName FROM MST_Branch";
try{
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while(rs.next()){
BranchDto branchDto = new BranchDto();
branchDto.setName(rs.getString("BranchName"));
branchList.add(branchDto);
}
}catch (SQLException e){
e.printStackTrace();
}finally{
try{
if (conn != null){
conn.close();
}
}catch (SQLException e){
e.printStackTrace();
}
}
return branchList;
}

【ACTION】sessionにリストを配置
public String execute() {
CompanyInfoDao companyInfoDao = new CompanyInfoDao();
List<BranchDto> branchList = new ArrayList<BranchDto>();
branchList = companyInfoDao.getBranchName();
session.put("branchList", branchList);
return SUCCESS;
}
【JSPでの取得。表示部分】
支店:<s:select name="dlstBranch" list="%{#session.branchList}"/>

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

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

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

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

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

yeondev

2018/10/11 02:08

プルダウンを表示するJSP側の処理も見せていただけませんか?
Takki

2018/10/11 03:03

すみません、載せ忘れておりました。追記いたしました!
guest

回答2

0

セッション属性を使う場合は、Actionクラスで、SessionAwareインタフェースを実装します。例えば以下のようになるでしょう。

java

1import java.util.ArrayList; 2import java.util.List; 3import java.util.Map; 4 5import org.apache.struts2.convention.annotation.Action; 6import org.apache.struts2.convention.annotation.Result; 7import org.apache.struts2.convention.annotation.Results; 8import org.apache.struts2.interceptor.SessionAware; 9 10import com.github.apz.sample.model.BranchDto; 11import com.opensymphony.xwork2.ActionSupport; 12 13/** 14 * @author a-pz 15 * 16 */ 17@Results({ 18 @Result(name = ActionSupport.SUCCESS, type = "dispatcher", location="index.jsp") 19}) 20public class ListAction extends ActionSupport implements SessionAware { 21 22 @Action("list") 23 public String list() throws Exception { 24 25 List<BranchDto> branchList = getBranchList(); 26 session.put("branchList", branchList); 27 28 return ActionSupport.SUCCESS; 29 } 30 31 @Override 32 public void setSession(Map<String, Object> session) { 33 this.session = session; 34 } 35 36 private Map<String, Object> session; 37 38}

Struts2のJSPにて、<s:select>のlist属性を使う場合には、必ず表示ラベルと値の組み合わせを設定します。設定していない場合は、list属性に指定したリストの中身は自動的にjava.util.Mapと判断し、値にMapのキー名、表示ラベルにMapのvalueを当てはめようとします。もしこれを満たさない場合は、単純にObject#toStringした内容が表示されます。

list属性に指定した内容がMapではなく何らかのDataTransferObject/ValueObjectを使う場合、値と表示ラベルを <s:select> に通知してあげる必要があります。

例えばそのDTOを、BranchDtoとし(getter,setterメソッドは省略しています)

java

1public class BranchDto { 2 private String name; 3 private String label; 4}

この場合、これをリストボックスに表示するJSPは、以下のようになります。

html

1<%@ page contentType="text/html; charset=UTF-8" %> 2<%@ taglib prefix="s" uri="/struts-tags" %> 3<html> 4<body> 5 <s:select listKey="name" listValue="label" list="%{#session.branchList}"></s:select> 6</body> 7</html>

https://struts.apache.org/tag-developers/jsp.html#session-scope-attribute
https://struts.apache.org/tag-developers/select-tag.html

投稿2018/10/12 02:36

A-pZ

総合スコア12011

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

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

Takki

2018/10/12 03:54

list属性を指定していなかったために、オブジェクトそのものが表示されていたんですね(^^;) いただいた回答をもとに、sessionを使った表示も試してみたいと思います。 非常に参考になるご回答ありがとうございました!
guest

0

ベストアンサー

いま検証はできませんが、

jsp

1支店:<s:select name="dlstBranch" list="branchList"/>

これでいけるのではありませんか?

補足 (16:52)

Actionソースに(executeがあるの)次のソースを追加してください。

java

1 public List<BranchDto> getBranchList() { 2 return branchList; 3 } 4 5 public void setBranchList(List<BranchDto> branchList) { 6 this.branchList = branchList; 7 }

JSPソースの支店は、これにしてみてください。

JSP

1 支店: <s:select list="branchList" 2 listKey="name" 3 listValue="name" 4 name="dlstBranch" 5 value="%{branchList.{name}}" /> <!-- after -->

sessionを利用したいという元の要望は、原文の 

session.put("branchList", branchList);

sessionがどう宣言されてるか見えませんね…一応上記のやり方でやってみてください。

投稿2018/10/11 03:57

編集2018/10/11 07:59
yeondev

総合スコア198

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

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

Takki

2018/10/11 05:49

ご回答ありがとうございます! そちらを実行すると下記のエラーが発生してしまいます。 HTTPステータス 500 - tag 'select', field 'list', name 'dlstBranch': The requested list key 'branchList' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location]
Takki

2018/10/12 00:44

ご返信が遅くなりすみません。 教えていただいた通り試してみたところ、問題なく表示されました! 本当にありがとうございます! sessionの利用に関しては、以前にこの方法で別の似たようなプログラムを作ったことがあり、今回も同じようにやってみただけですので、特にこだわりはありません(^^; いただいた回答について何点か質問があるのですが、教えていただけると幸いです。 1,selectのlist/list name/list value属性について理解を深めたいと思い調べてみたのですが、あまり情報が出てきません。listはselectタグの属性ではないのでしょうか? 2,現在、value値を文字列で受け取っておりますが、int型で受け取ることは可能でしょうか?通常のoptionタグでの振り分け方はわかるのですが、今回の方法ではわかりませんでした。 3,Actionクラスにアクセスメソッド加えましたが、getterもsetterもjspで利用されているのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問