• ベストアンサー

JSP内でString型からint型に変換する方法(SAStruts使用)

現在、SAStrutsを使用して、カレンダーの年表を作成しています。 Formクラスで定義したString型の変数を、JSP内でint型に変換するのが、うまくいきません。 申し訳ございませんが、ご教授いただけませんでしょうか。 よろしくお願い致します。

  • Java
  • 回答数10
  • ありがとう数10

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

  • ベストアンサー
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.7

request.getParameter("max_c"); というのは リクエストURLに http://~/~?max_c=xxx のようになっていないと取得できません。 リクエストに格納されているデータは getAttributeを使います。 ちなみに格納するときは setAttribute String strMax = ((formBeanの型)request.getAttribute("formBeanのキー")).getMax_c(); こんな感じ。

starter00
質問者

補足

askaaska様 おはようございます。 「request.getParameter("max_c");」 という書き方は、ヒドイ間違いなんですね。 (自分自身、ホント恥ずかしいです…。) お教えして頂いた通りにやったのですが、起動して、画面上で以下のように、エラーが出てしまいました。 --------------------------------------------------------------- org.apache.jasper.JasperException: JSPのクラスをコンパイルできません: An error occurred at line: 7 in the generated java file Only a type can be imported. java.jp.ne.sastruts.start.form.SastrutsForm resolves to a package JSPファイル: /WEB-INF/view/sastruts/list.jsp の中の37行目でエラーが発生しました SastrutsForm cannot be resolved to a type 34: int ww = cal2.get(Calendar.DAY_OF_WEEK); 35: 36: 37: String strMax = ((SastrutsForm)request.getAttribute("idNo")).getMax_c(); 38: 39: max = Integer.parseInt(strMax); 40: Stacktrace: org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92) org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330) org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:423) org.apache.jasper.compiler.Compiler.compile(Compiler.java:317) --------------------------------------------------------------- JSP上では、「String strMax = ((formBeanの型)request.getAttribute("formBeanのキー")).getMax_c();」の、「formBeanの型」のところにエラーの赤線が出ているので、インポートが必要なのかなと思います。 (JSP内で、自作のクラス(formBean)をインポートする方法を、ネット等で調べているのですが、なかなかありませんね。)

その他の回答 (9)

  • sh_hirose
  • ベストアンサー率66% (56/84)
回答No.10

// max_cがpage、session等に入っている場合 <bean:define id="max_c" name="max_c" /> <% int max = Integer.parseInt(max_c); %> でどうでしょう?

参考URL:
http://struts.wasureppoi.com/taglib/05_define.html
starter00
質問者

お礼

sh_hirose様 ありがとうございます!! 後ほど、お教えして頂いた通りに、やってみたいと思います。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.9

そお? どんなエラーなのかわからないけど ガンバ!

starter00
質問者

お礼

askaaska様 ありがとうございます☆ 頑張ります~。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.8

JSPでimportする方法なんて すぐ見つかると思うけど どんな調べ方をしているのかしら。 http://www.google.co.jp/search?hl=ja&q=jsp+import&lr=lang_ja

starter00
質問者

補足

askaaska様 先ほど、補足を書かせて頂いた後、importの仕方を見つけ、修正したのですが、まだエラーが出てます。 なんだか自分自身、行き当たりばったりの対応をして、悪い流れになっているので、もう一度、見直しながらやっていきたいと思います。 ありがとうございます。

回答No.6

普通に考えれば以下のような取得方法になるとおもうんですけど・・・ String strMax = ((formBeanの型)request.getParameter("formBeanのキー")).getMax_c(); Beanの型とキーは質問者さんが作成されているのだからわからないはずはないですよね? ちなみに <html:hidden property="max_c" /> ↑のような記述でhtml上に表示されるのはタグの中で上記のようにformBeanのプロパティから取得してhiddenタグと共にhtmlを書き出しているからです。

starter00
質問者

お礼

ProKaseifu様 ありがとうございます。 教えて頂いたことを踏まえて、やってみたいと思います! hiddenタグのご説明までして頂いて、本当にありがとうございます。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.5

> JSP上でエラーが出なかった Eclipseかなにかで「問題」が出なかったてことかしら? EclipseでJSP修正しているときの「問題」は あんまり信用しない方がいいわよ。 正しい記述なのに「問題」が出たりするので 私は完全に無視しているわ。 > ブラウザで画面を起動したら、エラーが出てしまいました ずばり推測 NullPointerException

starter00
質問者

補足

askaaska様 はい、Eclipseで、エラーが出なかったので、大丈夫かと思い、起動したらダメでした。 (あまり信用しないほうが良いんですね。。。) エラーは、以下のように出ました。 java.lang.NumberFormatException: null java.lang.Integer.parseInt(Unknown Source) 私の記述したJSPの内容は… <html:hidden property="max_c" /> 1行目:Calendar cal = Calendar.getInstance(); 2行目:Calendar cal2 = Calendar.getInstance(); 3行目:cal.set(cal.get(Calendar.YEAR),cal.get(Calendar.MONTH),cal.get(Calendar.DATE)); 4行目:cal2.set(cal.get(Calendar.YEAR),cal.get(Calendar.MONTH),1); 5行目:int max = cal.getActualMaximum(Calendar.DATE); 6行目:String strMax = request.getParameter("max_c"); 7行目:max = Integer.parseInt(strMax); 7行目の「Integer.parseInt」に対して、「java.lang.Integer.parseInt(Unknown Source)」というエラーが出ているので、6行目のリクエストからの取得の仕方が間違っているのだと思います。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.4

SAStrutsでの開発経験はないわ。 Struts、Struts2.0ならあるんだけどね。 SAStrutsは個人で勉強するのに使った程度よ。 感想・・・やっぱり私はXMLが好き

starter00
質問者

お礼

askaaska様 ありがとうございます。 私はStrutsとSAStrutsの経験が一回ずつで、まだまだ分からないことだらけですが、その中で、askaaskaさんのように、好きな分野を見つけられたらと思います。 お忙しい中、ありがとうございました。 PS.リクエストから取得する記述をして、JSP上ではエラーが出なかったのですが、ブラウザで画面を起動したら、エラーが出てしまいました。 SAStrutsは、かなりクセがあるみたいです。 なんとか頑張ってやります。 ありがとうございました。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.3

<%~%> はJavaよ? Javaにそんな文法があると思ってる? エラーになるに決まってるわ。 変数がどのスコープに入っているかは判らないから まず片っ端から探すのね。 とはいっても、セッションかリクエストかページコンテキストのいずれかだけど。 (わざとカタカナで書いたわ) それぞれの中身を確認してみるといいわ。 もう少し具体的に書くと 1.上の3つのどこかに格納されているFormBeanを取得する 2.FormBeanからmax_cを・・・てここまでくればわかるわよね。 ・・・今更だけどmax_cてFormBeanの中身であっているのよね?

starter00
質問者

補足

askaaska様 度々、ありがとうございます。 まず、どのスコープかを調べます。 はい、max_cはFormBeanの中身です。 max_c自体は、JSPでカレンダーを作成するのに、それぞれの月の最大日数を表すものとして扱っています。 なので、アクションクラス内で、それぞれの月の最大日数(うるう年に対応したもの)を求めて、その日数をmax_cに渡そうとしてます。 ただ、その求めたmax_cを、JSP内で使用するのに、記述の仕方が分からなくて、手が進まずにいました。 私自身、まだまだ勉強不足と痛感しております。 PS.失礼ですが、askaaska様は、SAStrutsのご経験は、ございますでしょうか。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

変数のスコープが違うからよ。 ただそれだけ。

starter00
質問者

補足

askaaska様 ありがとうございます。 私なりに、「 <% int max = Integer.parseInt(${max_c}); %> 」や、「 <% int max = Integer.parseInt(${f:h(max_c)}); %> 」というふうに記述してみたのですが、エラーになってしまってて。 他に記述方法がありましたら、教えて頂けないでしょうか。 よろしくお願い致します。

  • OKwebb
  • ベストアンサー率44% (92/208)
回答No.1

どのように変換しようとして、どううまくいかないか記載した方がいいですよ。 私はString型→int型変換によく Integer.parseInt()とか使いますけど。 > SAStruts使用 とありますが、関連性ありそうなんですかねぇ?

starter00
質問者

補足

OKwebb様 ありがとうございます。 不十分な情報で、すみません。 以下に、JSP内で記述した内容の一部を載せます。 -----------calendar.jsp------------------- <html:hidden property="max_c" /> <% int max = Integer.parseInt(max_c); %> ------------------------------------------ 以上のように記述した場合、「Integer.parseInt」のあとのカッコ内の変数(文字)の下に、赤い線が出て、エラーというふうに出ちゃいます。 ちなみに、変数の「max_c」は、Formクラスで、「public String max_c;」というふうに記述しました。 SAStruts使用というのは、特に意味無く書きました。 よろしくお願い致します。

関連するQ&A

  • string型からint型への型変換

    C++で、string型からint型は、 string str; //ほかのstring型の変数から整数部分のみを切り出して来たものが入る int i; //ここにstrの中身(整数)をあらたに入れたい が定義されている下で、 char s[10]="0"; などを通して、 int length=str.length(); str.copy(s,length,0); i=atoi(s); とやる他ないのでしょうか? 初心者のつまらない質問ですが、ご教授いただけると幸です。 よろしくお願いします。

  • jspでString型からlong型への変換

    プログラミング初心者です。 jspでString型の変数strに"1050652281474"という文字を入れて、それをlongに変換(キャストっていうのかな?)したいのですが、どうすればいいのか分かりません。どなたか分かる方がいましたら教えて下さい。 お願いします。

    • ベストアンサー
    • Java
  • 【C++/CLI】int型からString型への変換

    C++/CLIにて、int型変数の値 int test1 = -1; int test2 = -10; をString型に変換し「-1」「-10」といったような文字列に、 変換しようと思っています。 String::Format( "{0:D1}", test1 ); String::Format( "{0:D2}", test2 ); といった方法で可能なのは分かったのですが、 この方法だと、Formatの引数を値の桁数に応じて変えねばなりません。 ※String::Format( "{0:D2}", test1 );  のようにすると、「-01」となってしまうため。 桁数を意識せずに、int型変数の値をそのまま文字列に変換するような 良い方法があれば、ご教示お願いできませんでしょうか?

  • Stringの2次元配列からint型に変換

    おはようございます。 Stringの2次元配列からint型に変換できますか? 配列からの変換はString→int型の変換とは違いますか? ご教授ください。 よろしくお願いいたします。

  • String文字列を16進数のint型に変換

    String^ test = Wireless_ID_str02[i]->s_rssi; このtestには"1c"という文字列が入っているのですが、この文字をint型の int rssi_dec = ****** この中に入れたいのですが、方法はないでしょうか? ちなみに、 rssi_dec = strtol(test, &endptr, 16); こんなことをやってみたのですが、こんなエラーがでました。 error C2664: 'strtol' : 1 番目の引数を 'System::String ^' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照) 1> 使用可能なユーザー定義された変換演算子がない、または 1> マネージ型をアンマネージ型に変換できません。 どうぞ、よろしくお願い致します。

  • 【JSPのデータ型の変換エラー??】

    こんばんは! 現在、SQL Serverのテーブルに接続してJSPのテキストボックスをキーに検索結果を次のJSPに表示させるWEBを作成しています。 そこで検索結果を表示させるJSPでnvercharの値'AHFKS23847'をデータ型intに変換できませんでした。と表示されます。 ネットや書籍で調べましたが全くでておらず困っております。 ご教授下さい! String param = request.getParameter("param"); "SELECT * FROM T_Table where Number_Co="+param); として記述しております。 Number_CoはSQL Serverではテキスト型と設定されております。 宜しくお願いいたします!

    • ベストアンサー
    • Java
  • stringの値を、Calendarクラスの「.set」で使用するため

    stringの値を、Calendarクラスの「.set」で使用するためには。 どうしらたいいのでしょうか? Calendarクラスの変数に、「.set」を使用して値を設定したいのですが 設定するための値をPOSTでもっていきていて、srting型にしかなりません。 Integer.valueOf(str).intValue(); Integer.parseInt(str); などを使用して設定できないか、試してみたのですがエラーになってしまいました。 APIのページなども見てみたのですが、初心者なのでいまいち分かりません… こういう場合どう設定すればいいのか、どうぞご教授よろしくお願いいたします。

  • SAStrutsにおける変数表示

    SAStrutsを利用したSeasar2環境で、アクションフォームをまたいで変数を表示したいと考えております。 ・Test1Form.java  public class Test1Form {    @Required    public String username;  } ・Test1Action  @Resource  @ActionForm  protected Test1Form test1Form;  @Execute(validator = true, input = "aaa.jsp")  public String method1() {    return "../test2/bbb.jsp";  }  → 上記の場合、/test2/bbb.jspに「${f:h(username)}」と記述すると、変数の値が表示されます。 ・Test2Action  @Resource  @ActionForm  protected Test2Form test2Form;  @Execute(validator = true, input = "ccc.jsp")  public String method2() {    return "ccc.jsp";  }  → 上記のように、異なるアクションフォームを利用するccc.jspに「${f:h(username)}」を記述しても何も表示されない状態になります。    異なるアクションフォームで宣言した変数を表示させたいと考えているのですが、保持し表示する方法をご教示頂きたいのです。 何卒、よろしくお願い致します。

  • SAStrutsでActionからJSPに値を渡す

    はじめまして、当方駆け出しのプログラマです。 JAVA歴2ヶ月で勉強(研修)させてもらっています。 初歩的な質問かもしれませんが、ご返答いただけると幸いです。 勉強して一ヶ月ほどでJSPサーブレットを使った簡単なスケジュールを表示するプログラムを作りました。環境はEclipse(pleiades3.5)+tomcat6.0+jre1.6+mysql5.5.10です。 これをフレームワークに準拠したつくりに移行してくれと上司の方に言われました。 しかし、私が作ったものは、スケジュール表示で日付で参照し、そこからデータベースからとったスケジュールの日付と合致するものがある場合リンクを表示するというものでした。 このためタグライブラリのC:each等の繰り返しは使えないため、スクリプトレットで変数として値を持ってこないと動作しない状態です。 Stringやint型はrequest.getAttributeでもってこれるのはわかったのですがentityに入っている値を持ってくることが出来ずNullになってしまいます。 ソースはこちらになります。 書き出しで説明すると。 DB接続→値を持ってきてentityにセットする→これらをarrayListに格納→arrayListの中身を日付順にソート→entityの配列に収納する→jspに受け渡し→表示できない。 という状況です。 ScheduleMainはentityでSchedule_mainはDBのテーブルです。arrayの部分で日付順になるようにソートをかけてあります。これは理由があってsql内でソートしていません。 scheduleitemsはScheduleItemsというentityで複数個スケジュールを保管できるように配列をゲッターセッター設置してあります。  Action.java for(int i=0 ; i<schedulemain.size();i++){ ScheduleMain schemain = schedulemain.get(i); int ID = schemain.getId(); String place = schemain.getPlace(); String schedule = schemain.getSchedule(); int empId = schemain.getEmpId(); int category = schemain.getCategory(); int scheCategory = schemain.getScheCategory(); Date scheduleDay = schemain.getScheduleDay(); Time endtime = schemain.getEndtime(); Time starttime = schemain.getStarttime(); schedule_main.setCategory(category); schedule_main.setEmpId(empId); schedule_main.setEndtime(endtime); schedule_main.setId(ID); schedule_main.setPlace(place); schedule_main.setScheCategory(scheCategory); schedule_main.setSchedule(schedule); schedule_main.setScheduleDay(scheduleDay); schedule_main.setStarttime(starttime); array.add(schedule_main); } ScheduleMain[] itembean = (ScheduleMain[])array.toArray(new ScheduleMain[array.size()]); Comparator asc = new Comparator() { public int compare(Object obj0, Object obj1) { String nameKana0 = ((ScheduleMain) obj0).getScheduleDay().toString(); String nameKana1 = ((ScheduleMain) obj1).getScheduleDay().toString(); int ret = 0; // カナの昇順 if ((ret = nameKana0.compareTo(nameKana1)) == 0) { // カナが同じ場合はIDの昇順 String id0 = ((ScheduleMain) obj0).getStarttime().toString().substring(0,5); String id1 = ((ScheduleMain) obj1).getStarttime().toString().substring(0,5); ret = id0.compareTo(id1); } return ret; } }; scheduleitems.setItembean(itembean); jsp側ですが。 ScheduleItems scheduleitems = (ScheduleItems)request.getAttribute("Scheduleitems"); で宣言をし、out.printやlengthをとってもnullExeprionになってしまいます。 enteity部分 ScheduleItems.java package schedule.entity; import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name="schedule_main") public class ScheduleItems { public ScheduleMain[] itembean = null; public ScheduleItems(){ } public ScheduleMain[] getItembean() { return itembean; } public void setItembean(ScheduleMain[] itembean) { this.itembean = itembean; } } ScheduleMainは自動生成されるDoltengでDBから生成しました。 entityではだめなのかと思いDtoでも試しましたがやはり同じ症状になってしまいます。 この部分が解決されるだけでかなりの進捗が期待されるのでどうかよろしくお願い致します。 長文失礼しました。よろしくお願い致します。

    • ベストアンサー
    • Java
  • 文字列や文字から整数への変換方法について

    文字列(string型)や文字(char型)から整数(int型など)に変換 する時のルールがよく解りません。 たとえば、キーボードから数字を打って、その入力された数字を 数値として整数型の変数に代入したい場合のやり方です。 ちょっとプログラムを作ってみました。 using System; class clmain { private static void Main() { Console.Write("1桁の整数を入れてね "); char ch = char.Parse(Console.ReadLine()); int by1 = (int)ch; int by2 = (int)char.GetNumericValue(ch); Console.WriteLine("by1 = {0}, by2 = {1}, ch = {1}", by1, by2, ch); Console.Write("整数を入れてね "); string st = Console.ReadLine(); /* by = (int)st; コンパイルエラー */ int by3 = int.Parse(st); Console.WriteLine("by3 = {0}, st = {1}", by3, st); } } まず、char型からint型への変換では、  int型変数=(int)char型変数; はコンパイルは通りますけど、実行すると全く違った値が入って しまいます。たとえば char型変数の値が "1" だと、int型変数には 49 が入ります。 int型変数 = (int)char.GetNumericValue(char型変数); と書いてようやく、思い通りの動きをしてくれます。 また、string型からint型への変換では  int型変数=(int)string型変数; はコンパイルエラーになります。 int型変数 = int.Parse(string型変数); とするとコンパイル出来て正しく動きます。 これで質問ですけど、 (1)なぜstring型とchar型で、int型への変換方法が違うのでしょうか? (2)int型変数=(int)char型変数; とすると、上に書いたように、全く 違った(希望しない)値が代入されてしまいます。これは、どういう 動きをしているのでしょうか? また、これはコンパイルエラーに なりませんけど、どういう時にこの書き方をするのでしょうか? 解る方、お願いします。

専門家に質問してみよう