ママのスキンケアのお悩みにおすすめアイテム

DynaActionFormと、iterateタグを用いて、
複数レコードのデータをTEXTフィールドに設定しています(下記参照)。

入力画面(input.jsp)の次に実行されるActionクラスで、
Textフィールドに表示した配列の項目(sckForm[0].sck_no)の値を取得したいのですが、
記述方法がわからず困っています。
どなたかご存知の方がいらっしゃいましたら、教えてください。

(ソース)
■struts-config.xml
<form-beans>
<form-bean name="sckForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="sck_no" type="java.lang.String" />
<form-property name="sck_nm" type="java.lang.String" />
</form-bean>

■入力画面(input.jsp)
<html:form action="/sck_result.do">
<logic:iterate id="sckForm" name="sck.search" scope="application" indexId="index">
<html:text name="sckForm" property="sck_no" indexed="true"/>
<html:text name="sckForm" property="sck_nm" indexed="true"/>
</logic:iterate>
<html:submit property="submit" value="CSV出力" ></html:submit>
</html:form>

実際のHTMLは、下記のように変換されています。
<form name="sckForm" method="post" action="/sample/sck/sck_result.do">
<input type="text" name="sckForm[0].sck_no" value="2005-01-002">
<input type="text" name="sckForm[0].sck_nm" value="A">
<input type="text" name="sckForm[1].sck_no" value="2005-01-003">
<input type="text" name="sckForm[1].sck_nm" value="B">
<input type="submit" name="submit" value="CSV出力">
</form>

このQ&Aに関連する最新のQ&A

A 回答 (2件)

下記URLが参考になるかもしれません。



私はまだ、strutsをはじめて1週間しかたっていないので、何もお役には立てませんが・・・。

参考URL:http://www.techscore.com/tech/Java/Struts/11.html
    • good
    • 0

こんばんは。



ん・・・?
sck_result.doの中で、JSPからリクエストされた値を取得したいんですよね?
sckFormが定義されているクラスがあるはずですが・・・。
そこに値が入ってませんか?
(^^ゞ
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qiterateで受け取った値を処理に使いたい

こんにちは、honiyonです。

 まだ知識が浅い為、おかしな言い回しがあるかも知れませんがご容赦くださいm(_ _)m

 Servlet側で作成したデータをJSP側で

<logic:iterate id="LOOP" name="LOOP_LIST" indexId="index">
<bean:write name="LOOP" property="data1"/>
<bean:write name="LOOP" property="data2"/>
</logic:iterate>

 のようにして表示する方法はわかりました。
 今度は、これを表示するのではなくて処理に使いたいのですが、その方法がわからず難儀しています。

 こんな書き方は出来ないのですが、こういう事がやりたいと思っています。


<logic:iterate id="LOOP" name="LOOP_LIST" indexId="index">

<!---こっちは普通に表示--->
<bean:write name="LOOP" property="data1"/>


<!---data2は処理に使う--->
<%
 ↓↓ここの書き方がわからない↓↓
String CODE= "<bean:write name="LOOP" property="data2"/>"

if (CODE == "1") { out.println("牛"); }
else { out.println("馬"); }
%>
</logic:iterate>


 よろしくお願いします(..

こんにちは、honiyonです。

 まだ知識が浅い為、おかしな言い回しがあるかも知れませんがご容赦くださいm(_ _)m

 Servlet側で作成したデータをJSP側で

<logic:iterate id="LOOP" name="LOOP_LIST" indexId="index">
<bean:write name="LOOP" property="data1"/>
<bean:write name="LOOP" property="data2"/>
</logic:iterate>

 のようにして表示する方法はわかりました。
 今度は、これを表示するのではなくて処理に使いたいのですが、その方法がわからず難儀しています。

 こんな書き方...続きを読む

Aベストアンサー

No.1の方のtypoを補いつつ、

<logic:equal name="LOOP" property="data2" value="1">

</logic:equal>
<logic:notEqual name="LOOP" property="data2" value="1">

</logic:notEqual>

ですね。これですむなら、この方法を採用すべきです。


「本当は牛馬ではなく、実はもっと複雑で」というのであれば、form-beanのpropertyを通じて表示データを取得できるように、あらかじめ仕込んでおく手法もあります。


「どうしてもスクリプトレットで」となると、logic:iterate の処理とは全く無関係に、自身でform-beanからデータを引っ張ってくることになるかと思います。背景を適当に想像で補って全体を記せば、例えば以下のようなコードです。
どこか倒錯した感がありますね。だから、この方法は使うべきではありません。

<%@ page import="myproject.ListForm" %>
<%@ page import="myproject.ItemForm" %>

<html:form action="/myproject/listAction">

<bean:define id="LOOP_LIST" name="listForm" property="list"/>
<logic:iterate id="LOOP" name="LOOP_LIST" indexId="index">
<bean:write name="LOOP" property="data1"/>
<%! int index = 0; %>
<%
ListForm list = (ListForm) request.getAttribute("listForm");
ItemForm item = (ItemForm) list.getList().get(index++);
String code = item.getData2();
out.println(code.eqauls("1") ? "牛": "馬");
%>
<hr/>
</logic:iterate>

※ String の同値Checkには、equals() を使います。

No.1の方のtypoを補いつつ、

<logic:equal name="LOOP" property="data2" value="1">

</logic:equal>
<logic:notEqual name="LOOP" property="data2" value="1">

</logic:notEqual>

ですね。これですむなら、この方法を採用すべきです。


「本当は牛馬ではなく、実はもっと複雑で」というのであれば、form-beanのpropertyを通じて表示データを取得できるように、あらかじめ仕込んでおく手法もあります。


「どうしてもスクリプトレットで」となると、logic:iterate の処理とは全く無関係...続きを読む

Qのデータ表示に関して

<logic:iterate>を使ってデータの表示を行っています。
データは2つあり、1つは、コードで、もう1つは名称です。

その2つのデータをselectのoptionとして表示したいのですが、
下記ソースにするとoptionのvalueの値がうまく入ってくれず、文字列(<bean:write~)になってしまいます。
うまくデータをいれるにはどうすればよいのでしょうか??

<html:select property="name">
<logic:iterate id="list" name="nameList">
<html:option value="<bean:write name='list' property='code' />"><bean:write name="list" property="name" /></html:option>
</logic:iterate>
</html:select>

Aベストアンサー

同じ人が複数の名前で質問しているんじゃないかと思われる今日この頃...(^-^;

<HTML:OPTION>タグを使うのなら、iterateは使いません。
そのかわり、
<HTML:OPTIONS>タグを使ってください。
データの作り方に注意してください。
http://www.techscore.com/tech/ApacheJakarta/Struts/7.html

QJava-jspの画面入力値保持について

画面にテキスト、ラジオボタン、リストボックス とボタンがあります。
ボタンを押すと、JAVAで処理を行い、jspのviewで表示します。

1.テキスト、ラジオボタン、リストボックスなどに値が入力、設定されている状態で
ボタンを押して処理後にテキスト、ラジオボタン、リストボックスの値が
変わらないようにしたいのですが、
その場合、たとえば、入力、設定値をセッションになどに格納しておき
jspの所で、セッションから値を設定すると言うような方法になるのでしょうか?

2.ボタン押して処理後、ラジオボタン、リストボックスの選択値も
  変えないようにしたいのですが、
  これはどのように実現するのが、適切なのでしょうか?


以上、よろしくお願いします。

Aベストアンサー

ボタンというのはフォームのサブミットボタンのことですよ?
つまり、画面遷移が起きることを前提とすると(元の同じ画面に戻るのも含みます)

テキスト、ラジオボタン、リストボックスの状態を「要求パラメータ」として
送信し、それを次画面に反映するというのが最も一般的な方法です。

フレームワーク struts のアクションフォーム&JSPカスタムタグを使うと比較的楽に
そういう画面が作れますが、多くのフレームワークでも大差ありません。
簡単な画面なら素のサーブレート+JSPでも十分作れます。

セッションでもできますが、 セッションはログイン情報などの保持など、
限定された範囲で使うのが普通です。また、結局セッションに最新の
テキスト、ラジオボタン、リストボックスの状態を送るには、「要求パラメータ」
を送信する必要があります。

AJAXを使うという方法もあります。この場合、ボタンは AJAX 処理だけを行い
画面遷移を起こさないので、サーバ側で画面のテキスト、ラジオボタン、
リストボックスの状態をもつ必要はありません。

QStrutsでチェックボックスの値を取得する方法

明細行のチェックボックスで、選択した状態で画面再表示時にチェックを外した場合、再度画面を表示すると外したはずのチェックが戻ってしまいます。
現象
1.下記「作成したJSP」のチェックボックスを選択し、サーバへ送る。
2.「ViewList」内のチェックボックス「testCheckBox」(boolean型)にtrueが設定される。
※ViewListはtestActionFormのList型で、javaでもIteratorで1件づつtestActionFormを取得し、「testCheckBox」を確認している
3.上記1と同じHTMLフォームにおいて、今度はチェックボックスの選択を外して、サーバへ送る。
4.チェックを外したにも関わらず、trueの状態になってしまう。
良い対処方法があれば、ご教授をお願いします

※他のホームページで、ActionFormに下記メソッドを記述すると、チェックボックスが正常に戻ると書いてあり、試しましたがダメでした。
画面ActionForm内に、testActionFormのListを作成し、その中にチェックボックスがある場合、適用されないのでしょうか?
public void reset(ActionMapping mapping, HttpServletRequest request){
testCheckBox=false;
}

☆作成したJSP
<%-- 明細行の反復表示 start --%>
<logic:iterate name="testActionForm" id="ViewList"property="ViewList" indexId="idx">
<!-- チェックボックス 開始-->
<td nowrap >
<html:checkbox property="testCheckBox" name="ViewList" indexed="true" index="idx" />
</td>
<!-- チェックボックス 終了-->
<!-- 入力テキスト 開始-->
<td nowrap >
<html:text property="testInput" size="50" maxlength="30" name="ViewList" indexed="true" index="idx" />
</td>
<!-- 入力テキスト 終了-->
<%-- 明細行の反復表示 end --%>
</logic:iterate>

明細行のチェックボックスで、選択した状態で画面再表示時にチェックを外した場合、再度画面を表示すると外したはずのチェックが戻ってしまいます。
現象
1.下記「作成したJSP」のチェックボックスを選択し、サーバへ送る。
2.「ViewList」内のチェックボックス「testCheckBox」(boolean型)にtrueが設定される。
※ViewListはtestActionFormのList型で、javaでもIteratorで1件づつtestActionFormを取得し、「testCheckBox」を確認している
3.上記1と同じHTMLフォームにおいて、今度はチェックボックス...続きを読む

Aベストアンサー

>>resetメソッドを定義するのは、ActionFormのクラスです。
>ActionFormのクラスに下記resetメソッドを定義しています。
>public void reset(ActionMapping mapping, >HttpServletRequest request){
>testCheckBox=false;
>}

ActionFormがもっているViewListのtestActionFormについてです。
public void reset(ActionMapping mapping, HttpServletRequest request){
for(int i=0;i<viewList.size();i++){
((testActionForm)viewList.get(i)).setTestCheckBox(false);
}
}

Qjspのiterateのindexidについて

indexidは0からの連番だと思いますが
1からの連番を取るにはどうしたら良いのでしょうか。

indexidに1を足すような処理をJSPでかけたら一番いいとは思うのですが。

どなたか、わかる方いらっしゃいましたら、お願いいたします。

Aベストアンサー

http://struts.wasureppoi.com/jstl/02_foreach.html

JSTL/c:foreach タグののが向いてるかな。

Qリクエストに応じたselectedの初期値設定方法

リクエストに応じたOPTIONをselectedの初期値にする方法を教えて下さい。

java servletからjspを表示する際に、
setAttributeした値に応じてプルダウンの初期値に設定するにはどうしたら良いですか?

以下の様にDetail.jspに移動する前に、NOをセットしています。
普通に実行したら、YESで表示されてしまいます。
jsp側で何かを追記すれば良いと思うのですが、全然わかりません。。。

例)
[[[[[ShowDetail.java]]]]]
request.setAttribute("JAPAN", "NO");
request.getRequestDispatcher("/Detail.jsp")
.forward(request, response);

[[[[Detail.jsp]]]]
<form name="Japan">
<table border="1">
<tr>
<th>Japan</th>
<td>
<select name="Japan" id="Japan" >
<option value="YES">YES</option>
<option value="NO">NO</option>
<option value="KNOW">DON'T KNOW</option>
</select>
</td>
</tr>
</table>
</form>

リクエストに応じたOPTIONをselectedの初期値にする方法を教えて下さい。

java servletからjspを表示する際に、
setAttributeした値に応じてプルダウンの初期値に設定するにはどうしたら良いですか?

以下の様にDetail.jspに移動する前に、NOをセットしています。
普通に実行したら、YESで表示されてしまいます。
jsp側で何かを追記すれば良いと思うのですが、全然わかりません。。。

例)
[[[[[ShowDetail.java]]]]]
request.setAttribute("JAPAN", "NO");
request.getRequestDispatcher("/Detail.jsp")
.f...続きを読む

Aベストアンサー

こんにちは。

>普通に実行したら、YESで表示されてしまいます。
>jsp側で何かを追記すれば良いと思うのですが、全然わかりません。。。

あと、カテゴリがJavaScriptではなくJavaですね。

順に考えてみませんか。初期値を設定するには何が必要でしょうか。
今は何もしていないから一番上のYESが表示されています。
<option value="NO" selected="selected">とする必要がありますよね。
そうしたらそれを出力するようにJSPを記述すればいいわけです。

フレームワークを何も利用していなければ以下のようになると思います。

<%
// 例だとjapanにNOが入っている
String japan = (String)request.getAttribute ( "JAPAN" );
%>

<select>
<option value="YES"<%= "YES".equals(japan) ? " selected=\"selected\"" : ""; %>>YES</option>
<option value="NO"<%= "NO".equals(japan) ? " selected=\"selected\"" : ""; %>>NO</option>
<option value="KNOW"<%= "KNOW".equals(japan) ? " selected=\"selected\"" : ""; %>>KNOW</option>
</select>

各optionでどの文字列が入っているかによってselected="selected"を出力すれば良いです。

<%= "YES".equals(japan) ? " selected=\"selected\"" : ""; %>

上の記述は

if ( "YES".equals(japan) ) {
out.write ( " selected=\"selected\"");
} else {
out.write ( "" );
}
と同義です。
ようするにjapanにYESが入ってきたらselected="selected"を出力することにより初期選択項目とする。
NOが入ってくれば"YES".equals(japan)には該当しないので無出力、次の"NO".equals(japan)で該当するのでNOの<option>が初期値となります。

こんにちは。

>普通に実行したら、YESで表示されてしまいます。
>jsp側で何かを追記すれば良いと思うのですが、全然わかりません。。。

あと、カテゴリがJavaScriptではなくJavaですね。

順に考えてみませんか。初期値を設定するには何が必要でしょうか。
今は何もしていないから一番上のYESが表示されています。
<option value="NO" selected="selected">とする必要がありますよね。
そうしたらそれを出力するようにJSPを記述すればいいわけです。

フレームワークを何も利用していなければ以下のようになると...続きを読む

Qyyyymmddからyyyy/mm/ddへの変換

いつもお世話になっております。
Aと言う変数にはyyyymmddの値が入っていて
Aをyyyy/mm/ddにしてBの変数に入れたい場合の処理がわかりません。
調べたところ、SimpleDateFormatクラスと言うものを使えばよいと言うことが判明しました。
しかし、今まで使ったことがないのでよくわかりません。
変数Aと変数BはどちらもString型です。
ご教授お願い致します。

Aベストアンサー

 こんにちは。

 本当に変数aの中の文字列が厳密にyyyyMMddの形式のなっているのなら、普通に

String b = a.substring(0, 4) + "/" + a.substring(4, 6) + "/" + a.substring(6, 8);

 これでいいと思いますが、いったんDate型にする必要があったり、ちゃんと日付として認識できるか確かめる必要がある場合は、

String a = "20051029";

SimpleDateFormat formatter = (SimpleDateFormat)DateFormat.getDateInstance();
formatter.applyPattern("yyyyMMdd");
try {
  Date date = formatter.parse(a);
  formatter.applyPattern("yyyy/MM/dd");
  String b = formatter.format(date);
  System.out.println(b);
}
catch (ParseException ex) {
  System.out.println("解析失敗");
}

 こんな感じでいいんじゃないでしょうか。

 こんにちは。

 本当に変数aの中の文字列が厳密にyyyyMMddの形式のなっているのなら、普通に

String b = a.substring(0, 4) + "/" + a.substring(4, 6) + "/" + a.substring(6, 8);

 これでいいと思いますが、いったんDate型にする必要があったり、ちゃんと日付として認識できるか確かめる必要がある場合は、

String a = "20051029";

SimpleDateFormat formatter = (SimpleDateFormat)DateFormat.getDateInstance();
formatter.applyPattern("yyyyMMdd");
try {
  Date date = formatter.p...続きを読む

Qstruts 2つの選択肢(select)の連動

struts 初心者です。
今strutsを使ってシステム作成してるんですが、壁にぶつかってます。

行いたい処理は、2つある選択肢(select)で、一つ目のデータが選択されたら、関連する内容のデータを、もう一つの選択肢に表示させるようにしたいです。動的にっていうみたいですが。。

データの件数が多いので、一つ目のデータが選ばれたら、DBに接続して関連するデータを取得するみたいな感じで考えているのですが、方法が全くわかりません。

分かる方がいましたら、情報ください。
宜しくお願いします。。。。。。
図図しいお願いかもしれませんが、サンプルとか載せていただければ、ものすごくありがたいです。

Aベストアンサー

それでは最初にOracleでよくサンプルにある
HR.EMPLOYEE表をSELEC文で表示するJSPのソースを
ご紹介します。
使用しているOracleは10gXEバージョンです。

<%@ page contentType="text/html;charset=Shift_JIS" %>
<%@ page import="java.sql.*" %>
<%
// ログインに必要な情報
String user = "system"; // ユーザ名
String pass = "XXXXXXX"; // パスワード
String database = "XE"; // データベース
String server = "127.0.0.1";

System.out.println ("Connecting...");

// 接続およびSQL実行
try {
// ドライバクラスをロード
Class.forName("oracle.jdbc.driver.OracleDriver");

// データベースへ接続
Connection con = DriverManager.getConnection
("jdbc:oracle:thin:@" + server + ":1521:"+ database ,user ,pass);

// ステートメントオブジェクトを生成
Statement stmt = con.createStatement();

// クエリーを実行して結果セットを取得
String sql = "select employee_id,first_name,last_name,email from hr.employees where employee_id between 100 and 132";
ResultSet rs = stmt.executeQuery(sql);

// 表示
while (rs.next()) {

%>
<%= rs.getInt("employee_id") + " " + rs.getString("first_name") + " "+ rs.getString("last_name") + " " + rs.getString("email") %><br>

<% }

// データベースから切断
stmt.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
%>
これで表示できればSELECT文のwhere文を修正すれば
1つのSELECT文はできますよね?

それでは最初にOracleでよくサンプルにある
HR.EMPLOYEE表をSELEC文で表示するJSPのソースを
ご紹介します。
使用しているOracleは10gXEバージョンです。

<%@ page contentType="text/html;charset=Shift_JIS" %>
<%@ page import="java.sql.*" %>
<%
// ログインに必要な情報
String user = "system"; // ユーザ名
String pass = "XXXXXXX"; // パスワード
String database = "XE"; // データベース
String server = "127.0.0.1...続きを読む

Qlogic:iterateの属性にスクリプトレットで値を設定する方法

JSPでコーディングを行っています。

やりたい事としては、アクション項目からあるLIST型変数(個数M個(可変))を
logic:iterateを用いて、縦N行、横4列の表形式で表示させたいです。


類似した質問(http://oshiete1.goo.ne.jp/qa2945171.html)を参考に、
サンプルを作成して動作させてみたのですが、
logic:iterate内のoffsetにスクリプトレットで値を設定しようとすると
エラー(?)となり画面が表示されなくなります。(固定値設定時には表示されています。)
logic:iterateやその他タグ内の属性にどのように設定すれば動作させる事ができるかご教授下さい。
(int型のiをoffsetに設定しているのがよくないのでしょうか?(offsetに設定するのはString型でないとダメ?))

=============================================================================================================================================
<table>
<%for(int i=0; i < 4; i++) { %>

<tr>
<%-- <logic:iterate id="shohinId" name="DvdRentalSearchForm" offset="2" length="4" property="shohinInfoList" indexId="index"> --%>
<%-- ↑上記のようにoffsetに固定値を設定すると画面に値は表示されます。 --%>
<logic:iterate id="shohinId" name="DvdRentalSearchForm" offset="<%=i*4 %>" length="4" property="shohinInfoList" indexId="index">
<%-- ↑上記のようにoffsetにスクリプトレットの式を設定すると画面が表示されなくなります。 --%>

<bean:write name="shohinId" property="titleName" />
</logic:iterate>

</tr>
<% } %>
=============================================================================================================================================

急ぎ解決したい為、何卒ご協力下さりますよう
よろしくお願い致します。

JSPでコーディングを行っています。

やりたい事としては、アクション項目からあるLIST型変数(個数M個(可変))を
logic:iterateを用いて、縦N行、横4列の表形式で表示させたいです。


類似した質問(http://oshiete1.goo.ne.jp/qa2945171.html)を参考に、
サンプルを作成して動作させてみたのですが、
logic:iterate内のoffsetにスクリプトレットで値を設定しようとすると
エラー(?)となり画面が表示されなくなります。(固定値設定時には表示されています。)
logic:iterateやその他タグ内の属性にどのよ...続きを読む

Aベストアンサー

ELを使えばよかったような・・・。(動作、未確認です。)

Javaの道 > オープンソース > Taglibs -3.Standard Taglibs:式言語
http://www.javaroad.jp/opensource/js_taglibs3.htm

あとは、java.lang.Integerですかね。

(Integer)を追加してみるとか。

パッケージ org.apache.struts.taglib.logic
http://www.ingrid.org/jajakarta/struts/struts1.0/ja/target/documentation/api/org/apache/struts/taglib/logic/package-summary.html

それと、以下のサイトによると、「シングルクォートで囲む」っていう方法もあるとか。

@IT総合トップ > 旧@IT会議室 > Java Solution > Strutsタグを用いたページ切換えについて
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic&topic=8922&forum=12&start=0

ELを使えばよかったような・・・。(動作、未確認です。)

Javaの道 > オープンソース > Taglibs -3.Standard Taglibs:式言語
http://www.javaroad.jp/opensource/js_taglibs3.htm

あとは、java.lang.Integerですかね。

(Integer)を追加してみるとか。

パッケージ org.apache.struts.taglib.logic
http://www.ingrid.org/jajakarta/struts/struts1.0/ja/target/documentation/api/org/apache/struts/taglib/logic/package-summary.html

それと、以下のサイトによると、「シングルクォートで...続きを読む

Q確認ダイアログの出し方(JavaScript/struts)

Strutsでボタンを作成する記述は以下のようになると
思うんですが、ボタンクリック時に確認ダイアログを
だして、OKで実行、キャンセルで何もしないとするとき、JavaScriptをどうかけばいいんでしょうか。

ボタンは通常だと
<html:submit property="method">
<bean:message key="button.click" />
だったと思うのだけど、
スクリプト/ボタンの書き方が解からず・・・。

よろしくお願いします。

Aベストアンサー

Strutsのバージョンはわかりませんが、普通にonclickを指定してあげれば良さそうです。

<html:submit property="method" onclick="showConfirm();">

-----

function showConfirm(){
return confirm("これでいいですか?");
}

ちなみに上記は試していないのでちゃんと動くかわかりません。

参考URL:http://www.ingrid.org/jajakarta/struts/struts1.0/ja/target/documentation/struts-html.html#submit


人気Q&Aランキング