• ベストアンサー

strutsプログラミングでの疑問

初心者質問で恐縮です。 以下のように(1)アクションフォームと(2)JSPに設定して、idが未入力(null)でサブミットされた場合の(3)アクションをif文で分岐させたいのですが、条件の設定はどのようにすればいいのでしょうか? (1)アクションフォーム(java)の設定(抜粋)   private int id;  //IDをint型に設定 (2)登録フォーム(JSP)の設定(抜粋)   <input type="text" name="id" > <%--IDを登録する--%> (3)アクション(java)の条件分岐の設定(抜粋)   int input_id = aform.getId();   if(input_id==null){   } nullにするとエラーになってしまいます。

  • Java
  • 回答数4
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • process9
  • ベストアンサー率29% (81/272)
回答No.2

なら、エラー内容そのままの意味ですね。 javaでは、int型は、null値は取れなかったじゃないかな? idをIntegerクラスで置き換えるか、以下のように初期値の0で比較すればいいのでは? if(input_id==0){ }

liony_2003
質問者

お礼

その通りでした。サブミットボタンを押したときのアクションをコンソールで確認しましたところ、未入力(ブランク)の場合はinput_idは「0」として受け取っていることが分かりました。 よって、 if(input_id==0){ } で条件設定はOKでした。

liony_2003
質問者

補足

すいません補足欄から失礼しますが、お礼を書くのを忘れておりました。 このたびは回答いただき、本当にありがとうございました。 おかげで解決できました。

その他の回答 (3)

  • mura333
  • ベストアンサー率42% (3/7)
回答No.4

本題と外れていますが・・。 > 『Stringで受けて・・・』というのは、String型にキャストするということでしょうか? String型で受けて(フォームはString型変数で定義して)、intに変換ということを言ってます。 「intに変換」については、Integer.parseInt()を見れば分かると思います。

liony_2003
質問者

お礼

なるほどだんだんわかってきました。 フォームにはStringで定義して、加工する際にInteger.parseInt()を使ってint型に変換するということですね? このたびはどうもありがとうございます。

  • Healer99
  • ベストアンサー率31% (7/22)
回答No.3

解決したのなら良いですが、"0"が入力された場合と区別が付かないのでは? JavaScriptでエラーとするか、 バリディエイタ(入力チェック)を導入するか、 Actionで拡張するか、 Stringで受けて自分で拡張するか、 これらのどれかを選択したほうがきれいです。

liony_2003
質問者

補足

なるほど。検討させていただきます。 ただ今のところ今回の仕様に関しては、ミス入力以外の場合を除いて「0」を入力することはあり得なくて、また、ミス入力で「0」を入力したとしてもブランクの場合に走るアクションと同じで問題ないため、このままでいこうと思っています。 『Stringで受けて・・・』というのは、String型にキャストするということでしょうか? キャストは一度試してみたのですが私の設定が間違っているからだと思いますが、罰点が表示されてしまいました。 パターン1およびパターン2どちらも 「intからString型に変換はできません」 と表示されます。 パターン1 String a; a = (String)input_id ; パターン2 input_id = (String)input_id お恥ずかしい内容だとは思いますが、教えていただければ幸いです。

  • process9
  • ベストアンサー率29% (81/272)
回答No.1

エラー内容は?

liony_2003
質問者

補足

エラー内容につきましては、エクリプスでコーディングしていまして、上記のようにコーディングした段階で左側に赤の罰点が表示され、ポインタをあわせると、 「演算子==は引数の型int,nullで未定義です。」 とでます。

関連するQ&A

  • Struts ArrayListデータの画面出力方法

    MySQLのテーブルデータを下記の様にActionとFormにコーディングして取得し、それをフォームに格納するところまでできました。 -----アクション(抜粋)----------------------------------- ArrayList tmpArrayList = new ArrayList(); int n=0; while(rs.next()){ tmpArrayList.add(rs.getString("id"));   n++; } aform.setIdall(tmpArrayList); -------------------------------------------------- -----フォーム(抜粋)----------------------------- private ArrayList idall; public ArrayList getIdall() { return idall; } public void setIdall(ArrayList idall) { this.idall=idall; } -------------------------------------------------- この後、idallに格納したデータをJSP画面に表示させるにはどうコーディングすればいいのでしょうか? JSPファイルに<logic:iterate>と<bean:write>を使って表示させたいのですが・・・。 ご指導のほどよろしくお願いいたします。

    • ベストアンサー
    • Java
  • Java struts Formを分ける

    Java Struts1.3.10 1jspにつき1Formとし、A.jspからB.jspへ遷移させようと思っています。 しかしA.jspは正常に表示されるのですが、遷移後エラーが発生します。 Bean AForm のプロパティ AList に対するゲッターメソッドがありません 遷移後に見てほしいのはBFormなのですが、AFormを見てしまっています。 どのようにすればBFormを参照することができますでしょうか? struts-config.xml <action attribute="AForm" input="/pages/A.jsp" name="AForm" path="/Result" type="jp.co.elephan.rental.action.Aaction" scope="session" validate="true" parameter="insert"> <forward name="Result" path="/pages/B.jsp" /> <forward name="Return" path="/pages/A.jsp" /> </action> <!-- --> <action attribute="BForm" input="/pages/B.jsp" name="BForm" path="/Return" type="jp.co.elephan.rental.action.Baction" scope="session" validate="true" parameter="yes,no"> <forward name="Result" path="/pages/A.jsp" /> <forward name="Return" path="/pages/B.jsp" /> </action> 以上です。

    • ベストアンサー
    • Java
  • Java Struts ~に対するゲッターメソッドがありません

    Java Struts WindowsXp Java Struts共に初心者です。 上記を使用してログイン画面を作成しています。 エラーが発生しているのですが 「Bean LoginFrm のプロパティ id に対するゲッターメソッドがありません」 と言われます。 参考サイトはいくつもあるのですが、そもそもイテレータを使用していないとか私の状況に一致する回答を見つけることができませんでした。 (JAVA、Struts共に慣れていないためか応用がきかないみたいです) loginTop.jsp login.jsp LoginFrm.java LoginAct.java struts-config.xml のいずれかが原因だとは思うのですが、そのどこかが皆目見当もつきません。 loginTop.jsp----------------------------- <html:form action="/login"> <table border="0"> <tr><td> ログインID<html:text name="LoginFrm" property="id" size="6" maxlength="5" /> </td></tr> <tr><td> パスワード<html:password name="LoginFrm" property="pass" size="6" maxlength="5" /> </td></tr> </table> </html:form> login.jsp---------------------- <html:form action="/login"> <table border="0"> <tr><td> A:<bean:write name="LoginFrm" property="id" /> </td></tr> <tr><td> B:<bean:write name="LoginFrm" property="pass" /> </td></tr> </table> </html:form> LoginFrm.java---------------------- private String id; private String pass; public String getID() { return id; } public void setID(String id) { this.id = id; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } LoginAct.java-------------------- throws Exception { request.setCharacterEncoding("Windows-31J"); LoginFrm logFrm = (LoginFrm) form; log.info(" user = "+logFrm.getID()); log.info(" user = "+logFrm.getPass()); return mapping.findForward("login"); } struts-config.xml--------------------------- <form-beans> <form-bean name="LoginFrm" type="loginForm.LoginFrm" /> </form-beans> ~ <action attribute="LoginFrm" input="/pages/loginTop.jsp" name="LoginFrm" path="/login" type="loginAction.LoginAct" scope="request" validate="true"> <forward name="login" path="/pages/login.jsp" /> </action> 以上です。 かなり長くなり申し訳ありません。

    • ベストアンサー
    • Java
  • Strutsの設定エラーについて

    現在、Java開発環境及びStrutsフレームワークの設定を行なっていたのですが、動作確認用のJSPを実行すると以下のエラーが表示されてしまいます。 HTTPステータス500- << 説明 >> The server encountered an internal error () that prevented it from fulfilling this request. << 原因1 >> javax.servlet.ServletException: アクション /BeginAction に対応するマッピングが見つかりません org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858) org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791) org.apache.jsp.input_jsp._jspService(input_jsp.java:75)  <--- 略 ---> javax.servlet.http.HttpServlet.service(HttpServlet.java:802) filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:122) ※もうひとつ同様の原因が表示されていますが、長文となるため省略しています。 今回、Strutsを設定するにあたり、以下のページを真似て設定しました。 http://www.atmarkit.co.jp/fjava/rensai3/struts01/struts01_2.html また動作確認用のJSPは次に示すURLの"input.jsp"を使用させて頂いています。 http://www.atmarkit.co.jp/fjava/rensai3/struts02/struts02_1.html ※現在は、Strutsを使用しないJSPは正常に実行されます。 動作環境は、 OS:WindowsXP pro sp2 Tomcat:5.5.17 Java:J2SDK1.4.2_12 Stuts:1.3.5 です。 原因/対応策のご教授をお願い致します。

  • struts-config.xmlの設定

    お世話になります。 strutsを使用しlogin画面を作成し、エラーならエラーメッセージを表示させ、成功なら次のページに遷移するようにしたいのですが、 その際のstruts-config.xmlの設定がわかりません。 login画面を以下のように設定(login.jsp) <%@ page language="java" contentType="text/html; charset=windows-31j" pageEncoding="windows-31j"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <html:html> <head> <title>ログイン画面</title> </head> <body> <html:errors/> <html:form action="/login" method="post"> ユーザID : <html:text property="id"/><br> パスワード: <html:password property="password"/><br> <html:submit value="ログイン"/> </html:form> </body> </html:html> </html> struts-config.xml <form-beans> <!-- sample form bean descriptor for an ActionForm <form-bean name="LoginForm"   //jspのform actionで渡すデータ type="org.apache.struts.validator.DynaValidatorForm"/> end sample --> <!-- sample form bean descriptor for a DynaActionForm <form-property     name="userid" //jsp画面のproperty指定時に渡す type="java.lang.String"/> <form-property name="password" //passwordのとき type="java.lang.String"/> </form-bean> end sample --> </form-beans>      //actionで渡すデータの定義1 <action path="/Login"   //actionで渡すデータ type="org.apache.struts.actions.LoginAction" parameter="/pages/Input.jsp"/> //actionで渡すデータの定義2 <action path="/InputSubmit" type="app.InputAction" name="inputForm" scope="request" validate="true" input="/pages/Input.jsp"/> //actionで渡す定義3 <action path="/edit*" type="app.Edit{1}Action" name="inputForm" scope="request" validate="true" input="/pages/Edit{1}.jsp"/> end samples --> </action-mappings> の箇所を変更するのはわかるのですが、どう変更したらいいかがわかりません。 ログイン成功時画面(loginSuccess.jsp) <%@ page language="java" contentType="text/html; charset=windows-31j" pageEncoding="windows-31j"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <%@ taglib uri="/tags/struts-html" prefix="html" %> LoginSuccess!! <html:form action="/nextpage" method="post"> <html:submit value="次のページ"/> </html:form> </html> と設定してます。 javaクラスの設定も関係あるのですが、今回は省略してます 。今回したいのはlogin.jsp画面を表示させたいのですが、 その際以下のエラーがでます。 org.apache.jasper.JasperException: An exception occurred processing JSP page /pages/login.jsp at line 19 16: </head> 17: <body> 18: <html:errors/> 19: <html:form action="/login" method="post"> 20: ユーザID : <html:text property="id"/><br> 21: パスワード: <html:password property="password"/><br> 22: <html:submit value="ログイン"/> よろしくお願いします。

  • Struts2のValidation後のパラメータ

    Struts2のValidation機能を利用して入力チェックを行っているのですが、 入力画面表示時にGETパラメータを使用している場合、バリデーションエラーでINPUT画面に戻った際にGETパラメータが消えてしまいます。 Struts2: 2.3.15を使用しています 入力画面(index.jsp)は"simple/index.action?id=aa"のようにURLにGETでIDを指定する形式で表示します。(画面上に「ID:aa」が表示されます) 次にタイトル未入力のまま「確認」ボタンを押すとValidationが実行されてエラーメッセージとともに入力画面に戻ってくるのですが、「ID:」と表示され、Actionクラス(Index.java)のidが未設定の状態になります。 Validationエラー後もidがセットされ「ID:aa」が表示されるようにするにはどうすれば良いのでしょうか? Struts2 を触り始めて間もないですので質問自体が的外れかもしれません・・・ 何かアドバイスをいただけたら幸いです。 よろしくお願いいたします。 サンプルコードを以下に示します。 [struts.xml] <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="simple" extends="struts-default"> <action name="index" method="index" class="simple.action.Index"> <result name="success">/index.jsp</result> </action> <action name="confirm" method="confirm" class="simple.action.Index"> <result name="success">/confirm.jsp</result> <result name="input">/index.jsp</result> </action> </package> </struts> [Index.java] package simple.action; import com.opensymphony.xwork2.ActionSupport; public class Index extends ActionSupport{ private String id; public String getId() { return id; } public void setId(String id) { this.id = id; } public String index(){ return SUCCESS; } public String confirm(){ return SUCCESS; } } [Index-confirm-validation.xml] <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators> <!-- タイトルの必須入力チェック--> <field name="title"> <field-validator type="requiredstring"> <message>タイトルを入力してください</message> </field-validator> </field> </validators> [index.jsp] <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <%@ taglib prefix="sj" uri="/struts-jquery-tags"%> <!DOCTYPE html> <html> <body> ID:<s:property value="id" /> <s:form action="confirm"> <s:textfield name="title" label="タイトル" ></s:textfield> <s:submit value="確認"></s:submit> </s:form> </body> </html>

    • ベストアンサー
    • Java
  • Struts2のタグについて

    Struts2のタグにてJSP内にテキストボックスを以下のように記述しています。 この場合、JSPが最初に表示されたときはテキストボックス内には初期値として40 が表示されます。しかし、テキストボックスに 5 を入力しなおして サブミットし、再度JSPの画面が表示された時には40の値が表示されてしまいます。 value="40" の部分を消しておけばJSP画面再表示時には入力した 値が表示されますが初期表示としてvalueの部分は欲しいと思っています。 初期値の設定項目であるvalueの部分を残しながらもJSPの再表示時には 入力しなおした値が表示されるというような処理は以下のタグでは 無理なのでしょうか。何か良いお知恵がありましたらよろしくお願いいたします。 <s:textfield label="会員ID" name="id" value="40" />

    • ベストアンサー
    • Java
  • strutsでコンパイラ

    strutsでコンパイラができません struts-confing <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config> <form-beans> <form-bean name="Update" type="action.form.Update"/> <form-bean name="kensaku2" type="action.form.kensaku2"/> </form-beans> <!-- アクションの定義 --> <action-mappings> <!-- Form情報をUpdateとして、action.AccountFormクラスをアクションとして指定する --> <!-- Form情報はリクエストスコープに格納される --> <action name="HelloWorldForm" type="action.AccountForm" path="/Update" scope="request" > <!-- アクションの遷移先として論理名をhello ファイルパスを/webJSP/index.jspとする --> <forward name="Update" path="/webJSP/index.jsp" /> </action> </action-mappings> <message-resources parameter="ApplicationResource" /> </struts-config> index.jsp <%@page contentType = "text/html; charset=Shift_JIS"%> <%@page import= "java.util.List,websample.Account"%> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <html:html> <head> <title>一覧画面</title> </head> <body> <!-- HTMLのFROMタグに変換される --> <html:form method="POST" action="tuika1" target="_blank "> <div><font size="6" ><strong>顧客一覧画面</strong></font></div> <input type="submit" value="追加" name="insert"> </html:form> <form method="POST" action="kousin11" target="_blank "> <input type="submit" value="更新" name="update"> </html:form> <script type="text/javascript"> <!-- function disp(){ // 「OK」時の処理開始 + 確認ダイアログの表示 if(window.confirm('削除しますか')){ location.href = "index.jsp"; // index.jsp へジャンプ } // 「OK」時の処理終了 // 「キャンセル」時の処理開始 else{ window.alert('キャンセルされました'); // 警告ダイアログを表示 } // 「キャンセル」時の処理終了 } // --> </script> <html:form method="POST" action="Update"> <input type="submit" value="削除" name="delete" onClick="disp()"></p> <table border="1"> <tr> <TH>コード <TH>名称 <TH>住所 <TH>電話 <TH>メール <% List list = (List)request.getAttribute("list"); for(int i=0; i<list.size(); i++){ Account account = (Account)list.get(i); %> <tr> <td><%=account.getid()%> <td><%=account.getname()%> <td><%=account.getaddress()%> <td><%=account.getdenwa()%> <td><%=account.getmail()%> <td><input type="radio" name="radio" value="<%=account.getid()%>" > <% } %> </table> </html:form> </body> </html:html>

  • Java Struts MVCモデル 正しい書き方

    Java Struts1.3.10 皆でとあるシステムを作ることになったのですが、 JSP・ActionForm・Actionそれぞれの関係の在り方について悩んでいます。 ログイン機能を例とします。 1機能、1Form、1Actionとした場合は: 1.Login.jspでIDとPASSを入力。 2.LoginResultForm.javaにIDとPASSを格納。 3.LoginResultAction.javaでDBチェック(IDとPASSの存在・権限) 4.Result.jspへ遷移。ID・PASS・権限を表示する 使用するファイルは4つとなります。 1JSP、1Form1、Actionとした場合は: 1.Login.jspでIDとPASSを入力。 2.LoginForm.javaにIDとPASSを格納。 3.LoginAction.javaでDBチェック(IDとPASSの存在) 4.ResultForm.javaにIDとPASSを渡す(Sessionなど) 5.ResultAction.javaでDBから権限を取得、ResultFormに格納 6.Result.jspへ遷移。ID・PASS・権限を表示する 使用するファイルは6つとなります。 現在意見が三つありまして、 1.違うForm同士にデータのやり取りが発生するようであれば(1機能とし)、同じフォームにするべきではないのか? 2.Fromのメンバの数が少ないうちは良いが、今後数が増えると可読性が悪くなるから分けるべきではないのか? 3.フォームは同じでないとまずいが、ActionはJSPごとに分けるべき というものです。 1.ではログイン者情報をセッションに保持することは許可しています。(一部例外を認めている) これらはいずれもStrutsフレームワークの範疇から逸脱している、あるいはMVCモデルに反している、そもそも非効率的ということはないのでしょうか? つまりあくまで実装の仕方の問題でしかない、という結論でよろしいでしょうか?

    • ベストアンサー
    • Java
  • strutsプログラミングでJAVASCRIPTの設定

    Strutsプログラムで、JSPに下記コーディング(抜粋)をして実行すると、 HTTPステータス 500 - javax.servlet.ServletException: Cannot retrieve mapping for action /# というエラーが表示されます。 この原因と、解決策を教えて頂けないでしょうか? 目的は、 「JAVASCRIPTを使って、1つのformに複数のボタンをつくり、それぞれ異なるactionを実行させたい」 わけです。 エラーメッセージから、主な原因はaction="#"にしていることだと思うのですが、どう変えればいいかが分かりません。 <script language="JavaScript">  function jump_1(){   document.MainForm.action="pages/StrutsSample_1.do";   document.MainForm.submit();  }  function jump_2(){   document.MainForm.action="StrutsSample_2.do";   document.MainForm.submit();  } </Script> <html:form method="post" action="#" >  <html:button property="MainForm" value="追加" onclick="jump_1()" />  <html:button property="MainForm" value="修正" onclick="jump_2()" />  <html:radio property="checked" value="1" />  <logic:iterate id="itm" name="key">   <bean:write name="itm" />  </logic:iterate><br> </html:form>

    • ベストアンサー
    • Java

専門家に質問してみよう