Struts使用中のXMLからデータ取得方法について

このQ&Aのポイント
  • Strutsを使用してFormBeanにセットされた値をテキストに落とし込む方法を学んでいますが、XMLからデータを取得する方法について困っています。
  • Testクラスのexecuteメソッドが2回登場していてコンパイルエラーが発生しています。他の方法を試しましたがうまくいきません。
  • インターネットで検索しましたが、FormBeanとXMLの組み合わせのサンプルが見つかりません。助けていただけると嬉しいです。
回答を見る
  • ベストアンサー

「Struts使用中」XMLからデータ取得

FormBeanにセットされた値を取得して、その値を元に一致するデータをXMLからとってきてそれらをテキストに落とし込む。という動作です。 最初はFormBeanにセットされた値をそのままテキストに落とし込むだけだったので楽にできて正常に動いていましたが、「XMLからとってくる」という動きを追加しようとしたところうまくいきません。 public class Test extends Action { (1) public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res) {   FormBeanからキーになる値をとってくる。 } (2) public static void main(String[] args) throws Exception { Document document = DocumentBuilderFactory.newInstance()  キーとなる値を元にXMLからデータ検索し、値を取得 } (3) public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res) {   そのほかのFormBeanの値をとってきて(2)で取得した値と一緒にテキストに落とし込み、returnで処理終了のjspを表示させる }  public ActionForward executeが(1)と(3)で2回でているからコンパイルエラーがでるのだとわかるのですが、その他の記述方法がわかりません。  ネットでいろいろ探したのですが、XMLparserのサンプルやStrutsのサンプルはあるのですが、2つ一緒のサンプルが見つからないので困っています。  ご存知の方よろしくお願いいたします。

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

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

  • ベストアンサー
回答No.3

たびたび失礼します。 コンパイルエラーや、実行時エラー、 (もしくはException) が出たときは、そのエラーやExceptionの内容を記述するとよりよい回答が得られやすいですよ。 可能であればソースも載せるとよいかと。 (顧客の名前など、晒したくない情報はそれなりの形に変換して載せないとだめですが。)

tropical-flower
質問者

お礼

お礼が遅くなりまして申し訳ないです。 できました!!ありがとうございます!!

その他の回答 (2)

回答No.2

質問者さんの状況は把握しました。 お気持ちお察しいたします。 >Document document = DocumentBuilderFactory.newInstance() の前にどんな処理をしているか分かりませんが、 たとえば、 if(hoge == hog2){   //処理   return; }else{   //処理   return; } Document document = DocumentBuilderFactory.newInstance() とかしてたりしませんか? そうすると、問題の箇所に行く前に必ずreturnされてしまいますよね? このようなこと(また似たようなこと)したりしていませんか? それから、mainメソッドがないとコンパイルエラーが出るということもありません。 この回答が少しでもヒントになれば幸いです。

tropical-flower
質問者

お礼

ありがとうございます! 確かにreturnがはいっていました!!! お恥ずかしい限りです。早速削除してもう一度つくりなおします。

回答No.1

なぜにmainメソッドを実装しているのですか? それとなぜ、同じメソッドが2個あるのですか? (1)のメソッドで、 FormBeanからキーになる値をとってくる ↓ キーを元にXMLから値をとってくる((2)のメソッドの中身だけ) ↓ 他のFormBeanの値とXMLから取得した値をテキストに落とし込む((3)のメソッドの中身だけ) とするのはダメなのですか??? Strutsとかうんぬんの前にjavaの基本が分かってないように思えます。 それからサンプルはあくまでも「サンプル」です。 2つ一緒になった「サンプル」など自分に都合の良いサンプルなんかあるわけないです。

tropical-flower
質問者

補足

アドバイスありがとうございます。 javaの基本、はっきりいってわかってないです。プログラミングの経験もないです。 「やさしいJava」の本をわたされただけで「作っておいて」と言われたので。。 自分でも自覚しております。 (2)の中身だけ書こうとしたのですが、(1)の public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res) { の中に書くとコンパイル時に Document document = DocumentBuilderFactory.newInstance()に制御がうつることはありません。といわれエラーがでます。 また「main」を書かないと同じくコンパイルエラーになったので書きました。 (1)と(2)だけ、(3)だけだとうまく動くのですが。。

関連するQ&A

  • tomcat(struts)で起動時に処理を行いたい

    strutsでhttp://localhost:8080/test/test.do というように呼び出せば、以下のexecuteメソッドが呼ばれるわけですが、 public ActionForward execute(ActionMapping map, ActionForm fm, HttpServletRequest req, HttpServletResponse response) throws Exception {   ++処理++ } ここでおこなう処理をアプリ読み込み時つまりTomcat起動時に 共通の処理を行いたいのですが、何か方法はありませんでしょうか。 お願いします。

    • ベストアンサー
    • Java
  • strutsのstruts-config.xmlでのエラーメッセージ

    こんばんは strutsのエラーメッセージ表示で困っています。 javaでthrowしてstruts-config.xmlのexceptionで エラーを表示します。 以下のようにコーディングしてあり、 key999に定義してあるメッセージを表示することはできます。 しかしmessagesにセットしたメッセージを表示することができません。 messagesにセットしたメッセージを表示するにはstruts-config.xmlの keyはどのように設定すればよいのでしょうか? よろしくお願いします。 *struts-config.xml <exception key="999" type="myException" path="xxxxxxxxxx.jsp" handler="myExceptionHandler"/> *java public ActionForward hoge( ActionMapping map, ActionForm form, HttpServletRequest req, HttpServletResponse res ) throws Exception { try { return map.findForward("XXXXX"); } catch (myException e) { ActionMessages messages = new ActionMessages(); messages.add("error" ,new ActionMessage("001","エラー")); saveMessages(req,messages); throw e; } }

  • strutsのhtml:linkの使い方

    html:linkを使用してJSPを表示した際に、前のフォームのプロパティ値(ここではstaffNumberの値)を取得したいのですが,うまくいきません。 同じ処理をhtml:submitで実行すると取得できています。 その違いを教えて頂きたいのです。 以下がそのコードです。 【struts-config】 <form-bean dynamic="true" name= "loginForm" type="org.apache.struts.validator.DynaValidatorForm"> <form-property name = "staffNumber" type= "java.lang.String" /> </form-bean> <action name="loginForm" path="/login" scope="request" type="login.action.LoginAction" validate="false"> <forward name="success" path="/login.jsp" /> </action> 【login.jsp】 <html:form action="/login">  <html:text property="staffNumber" size="10"maxlength="8"/> <html:link action="/login">testlink</html:link> <html:submit value="test"/> </html:form> 【LoginAction】 public class LoginAction extends Action{ public ActionForward execute (ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res) throws Exception{ DynaValidatorForm loginForm =(DynaValidatorForm) form; String staffNumber=(String)loginForm.get("staffNumber"); System.out.println(staffNumber); return (mapping.findForward("success")); } } linkの処理で同じJSPを表示していますが,前のプロパティ値を取得しているかをログで確認する事を優先しているのでそのようにしています。 質問の意味がわからない、ソースの不足等ありましたら御指摘下さい。 宜しくお願いします。

    • ベストアンサー
    • Java
  • ActionForm form にnullが入ってくる原因

    import java.io.IOException; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; public ActionForward execute( ActionMapping map , ActionForm form , HttpServletRequest request , HttpServletResponse response ) throws ServletException, IOException, ClassNotFoundException, SQLException { という記述をして このソースで落ちる原因を調べたら、ActionForm form の "form" でnullが入ってきていました。 なにか定義し忘れているのでしょうか?

    • ベストアンサー
    • Java
  • strutsでのgetInputStream

    お世話になります。 早速なのですがちょっと困っていて知ってる方いたら教えていただきたいと思います。 現在 strutsのactionからhttpの内容を全て取り出すプログラムを 作成しています。 httpヘッダーに関しては問題なく取得できたのですが httpのボディ部をHttpServletRequest.getInputStream()で取得 しようとしてもバイト長が-1で返ってきてしまい読み込めません でした。 読み込もうとしている値はテキストです。 (キ-=値の形式ではないので、getInputStreamでやっています。) プログラムを抜粋して載せさせていただきます。 ------------------------------------------------------- public class TestAction extends Action{ public ActionForward execute(ActionMapping mapping,ActionFormform,HttpServletRequest request, HttpServletResponse response) { try{ ServletInputStream sis = request.getInputStream(); byte[] bytes = new byte[1024]; String is=""; while(true){ int len = (sis.readLine(bytes,0,1024)); System.out.println("read length: " + len);←ここで-1が返ってくる。 if(len == -1){ break; } } }catch(Exception e){ e.printStackTrace(); } return null; } } ----------------------------------------------- どうぞよろしくお願いしますm(__)m

  • executeメソッドが複数回呼ばれている?

    こんばんは。現在、Java言語を勉強しているものです。 初めて間もないので、文章がわかり辛い点があるかとは思いますが 宜しくお願い致します。 ※strutsを使用しています。 JSPのある画面から、ボタンを押下することにより、 下記のアクションを実行しています。 しかし、一回しかボタンを押下していないにも関わらず、 executeメソッドが複数回呼ばれるパターンがあります。 public final class TestAction extends Action { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res) { System.out.println("TEST"); return (new ActionForward(mapping.getInput())); } } ※ マッピングは下記のとおりです。 <action path="/test" type="package.TestAction" name="XXXXForm" validate="true" input="/pages/XXXXX.jsp" scope="request"> </action> ※コンソール上に、 TEST と表示される場合と TEST TEST と表示される場合があります。 一度しかCALLされないようにしたいのですが(一度しかCALLされないものだと思っているのですが)、 どのように対処したらいいかで困っております。 ご指南のほう、宜しくお願い致します。 宜しくお願い致しますm(_ _)m

    • ベストアンサー
    • Java
  • list<クラス名> とは何でしょうか?

    JAVA初心者のものです。 新規プロジェクトに向けてJAVAの習得に励んでおり、現在は「プロになるためのWeb技術入門」という本でフレームワークについて勉強しています。 ところでその本の中で次のコードがありますが、ここで List<ProductItem> は何を意味するものでしょうか? ご存知の方は教えてください。 なお、ProductItem は別の箇所で定義されたクラス名です。 public class ItemListShowAction extends Action { /* (non-Javadoc) * @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ProductLogic productLogic = new IbatisProductLogic(); List<ProductItem> productList = productLogic.getProductList(); request.setAttribute("productList", productList); return mapping.findForward("show"); } }

    • ベストアンサー
    • Java
  • Struts等に出てくる用語について

    閲覧ありがとうございます。 Strutsに出てくる用語がいまいちしっくり理解できておりません。 なので現在はルールと割り切って書いてますが、 より深い理解をしたいと思っております。 何か良書やサイト(英語でもかまいません)がありましたら 教えていただけませんでしょうか? 宜しくお願い致します。 いまいち理解できない単語の例 ActionMapping ActionForm HttpServletRequest HttpServletResponse request response dispatch context

    • ベストアンサー
    • Java
  • strutsで画面遷移

    お世話になります。struts初心者です。 test1.jspから、リンクをクリックしたら、次のページ(download.jsp)へ遷移させたいのですが、「ページが見つかりません」となってしまいます。 以下のようなソースコードにしています。 どこがおかしいのでしょうか・・・・情報少ないでしょうか。わかる方いらっしゃいましたら、おしえてください。 https://xxxxx/test/test1.jsp  ↓リンククリックで下記URLになり「ページが見つかりません」 https://xxxxx/login/menu.do ------------------------------------------------------- test1.jsp ------------------------------------------------------- <html:html> <head> <script language="JavaScript"> <!-- function gonext(){ document.menuForm.menuOperation.value ="download"; document.menuForm.submit(); } --> </script> </head> <body> <html:form action="/login/menu"> <html:hidden property="menuOperation"/> <A href="javascript:gonext()"> go next </A> </html:form> </body> </html:html> ------------------------------------------------------- struts-config.xml ------------------------------------------------------- <form-beans> <form-bean name="menuForm" type="xxx.login.CMenuActionForm"/> </form-beans> <action-mappings> <action path="/login/menu" type="xxx.login.CMenuAction" name="menuForm" scope="request"> <forward name="download" path="/common/download.jsp"/> </action> </action-mappings> ------------------------------------------------------- CMenuAction.java ------------------------------------------------------- public class CMenuAction extends CxxxDLAction{ public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { return mapping.findForward("download"); } } ------------------------------------------------------- CMenuActionForm.java ------------------------------------------------------- public class CMenuActionForm extends ActionForm{ String menuOperation; public String getmenuOperation() { return menuOperation; } public void setmenuOperation(String menuOperation) { this.menuOperation = menuOperation; } }

  • Servletでcsvファイル読込

    Servletからcsvファイルを読込む処理を作成しています。 しかし、FileNotFoundExceptionが発生してファイルを読込めません。 下記のように記述した場合、csvファイルはどこに置けばよいのでしょうか? いろいろファイルの置き場所を変えてはやってみましたがダメでした。 package action; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; public class MemberEntryAction extends Action{ public ActionForward execute(ActionMapping mapping,ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { try { // 入力ストリームを作成。 FileReader fr = new FileReader("a.csv"); BufferedReader br = new BufferedReader(fr); // 読込みループ。 String line; // 読み込まれた1行。 while( (line = br.readLine()) != null ) { System.out.println(line); } // 入力・出力ストリームを閉じる。 br.close(); fr.close(); } catch ( FileNotFoundException e ) { System.out.println("FileNotFound!"); } return mapping.findForward("memberMenu"); } }