• 締切済み

SAstrutsについて

SAStrutsの勉強をしています。 公式サイトから一通りのサンプルを試して動かして見ました。 とりあえず動きましが以下のことで悩んでおります。 ルートパッケージ配下にはaction,dto,entity,form,service,utilがサンプルにあります。 そこで独自にパッケージ(logic)を作成しました。 サンプルではaction⇔service間でDBのやり取りをしていたのを 今回action⇔logic⇔serviceというようにやってみたのですがエラーがでます。 actionで @Resource protected EmployeeService employeeService; をという変数を @Resource protected EmployeeLogic employeeLogic; に変更したら「自動設定」に失敗というメッセージが表示されます。 どうすればactionからLogicを呼び出せるのでしょうか。 よろしくお願いいたします。

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

みんなの回答

  • newta777
  • ベストアンサー率58% (20/34)
回答No.1

creator.diconに <component class="org.seasar.framework.container.creator.LogicCreator"/> がありますか? Logicのクラスはlogicパッケージの下にありますか? そのあたりはSAStrutsの説明ページではなくて Seasar2の方のページにあるので読んでみると良いかもしれません。

iemon_gori
質問者

お礼

Seasar2のサイトをすべて読みました。 creater.diconにはご指摘いただいた内容は設定していたのですが、 customizer.diconに設定をしておりませんでした。 ヒントを下さりありがとうございました。

関連するQ&A

  • 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でServiceのStatic変数

    SAStrutsでServiceのStatic変数の動作で疑問があります。 Eclipse+TomcatでサンプルWebアプリを作成し、以下のサービスをActionから呼び出しています。 これは、Staticなint型の変数に、インスタンスを生成した回数を格納する物です。 public class SampleService{ private static int instanceCnt = 0; public SampleService(){ instanceCnt++; System.out.println(instanceCnt); } } これを何度も呼び出すと、何故かある時突然、出力する数値が1にリセットされるのです。 Static変数はスレッド間で共通で使われているはずなので、これは起こらないはずではないでしょうか? 考えられるとすれば、Tomcatが複数のJavaVMを呼び出して、Webアプリケーションを実行しているのでは、と思うのですが、いまいち確信が持てないのです。 なぜこういう事が起こるのか、詳しい方、教えてもらえないでしょうか。

    • ベストアンサー
    • Java
  • 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
  • java strutsでの一覧表の表示方法について

    以下の内容でロジックを組んだのですが、 jspより表示される一覧表は、003 name3が3件表示されてしまいます。 一覧表を正しく表示できない原因を教えてください。 SP0010_FORM_Bean.java public class SP0010_FORM_Bean { protected String id; protected String name; public void setId(String s) { id = s; } public String getId() { return id; } public void setName(String s) { name = s; } public String getName() { return name; } } SP0010_FORM.java public class SP0010_FORM extends ValidatorForm{ protected List<SP0010_FORM_Bean> loopList; public void setLoopList(List<SP0010_FORM_Bean> list) { loopList = list; } public List<SP0010_FORM_Bean> getLoopList() { return loopList; } } SP0010_ACTION_10.java SP0010_FORM initBean = new SP0010_FORM(); request.setAttribute("list_form", initBean); List<SP0010_FORM_Bean> list = new ArrayList<SP0010_FORM_Bean>(); SP0010_FORM_Bean bean1 = new SP0010_FORM_Bean(); bean1.setId("001"); bean1.setName("name1"); list.add(bean1); bean1.setId("002"); bean1.setName("name2"); list.add(bean1); bean1.setId("003"); bean1.setName("name3"); list.add(bean1); initBean.setLoopList(list); jsp <table border="1"> <logic:iterate id="loop" name="list_form" property="loopList"> <tr> <td><bean:write name="loop" property="id" /></td> <td><bean:write name="loop" property="name" /></td> </tr> </logic:iterate> </table>

    • ベストアンサー
    • Java
  • リフレクションでフィールドに値を設定

    リフレクションで取得したクラスの一覧の各クラスのString型のフィールドにだけ 任意の値を設定するサンプルを下記のように作成しました。 このプログラムの流れの中でString型のフィールドに任意の値を設定するには どのように書けばよいでしょうか。 調べてみるとFieldクラスのsetメソッドを使用するようですが下記サンプルの中で 第一引数には何を渡せばよいかがわからないです。 【サンプル】 ※最初のgetClasses()で指定パッケージ配下のクラスは取得できています。 import java.io.File; import java.io.IOException; import java.lang.reflect.Field; import java.net.URISyntaxException; import java.net.URL; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; public class ReflectionTest { public static void main(String[] args) { List<Class<?>> classes; try { // 指定したパッケージ配下のクラスを取得 classes = getClasses("test"); for (Class<?> class1 : classes) { Field[] fields = class1.getDeclaredFields(); for(Field field : fields) { field.set(????, "任意の文字列"); // 第一引数に何を渡せばよい?? System.out.println(field.getType().getName()); } } } catch (ClassNotFoundException | IOException | URISyntaxException e) { e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • java/strutsのFormの役割について

    現在java/Strutsで開発を行なっています。 DB接続クラス(以下opeクラス)への値の受け渡しは、Beanクラスで行なっています。 ※単一項目の場合はBeanクラスは使用せず、そのまま渡す場合もあります。 (1)画面の入力項目をopeクラスへ渡す場合のFormクラスからBeanクラスへの変換(値の詰め替え) (2)opeクラスから返却される検索結果のBeanクラス⇒Formクラスへの変換(値の詰め替え) (1)、(2)の処理はどこに持つべきものでしょうか? 現在のクラス構成は  XXXForm⇒strutsのFormクラス  XXXAction⇒strutsのActionクラス  XXXCtrl⇒Actionから呼ばれるビジネスクラス  XXXope⇒⇒ビジネスクラスから呼ばれるDB接続クラス  XXXBean⇒opeとの値のやり取りを行なうクラス   自分はビジネスクラスに実装をしようと思ったのですが Formクラスに実装するべきだ、といわれました。 値の紐付けの意味もこめて、Formに変換メソッドを持つべきらしいです。 変換にあたって、基本そのまま値を設定する前提です。 (少しだけロジックも存在しますが、A変数の値が~だったらB変数に値を入れる程度) 自分的にはFormクラスは画面、BeanクラスはDB接続とのやり取り それぞれ位置づけが異なるため、FormクラスにBeanクラスを宣言するのはどうかと思いました。 本来はどのような形が正しいのでしょうか?

    • ベストアンサー
    • Java
  • Java JSP/サーブレットについて

    HtmlファイルでDBとのコネクションを行うログイン処理の画面を作成しました。 <form name="mainForm" action="Test" method="POST"> でTest.javaファイルに処理が移りDBとのコネクトを行いデータの取得はできました。 Test.javaファイルを「Ctrl+C」で「Ctrl+V」を行い別名でLogin.javaファイルを作成しました。 作成したLogin.javaファイルはクラス名などはもちろんLoginと変更しています。 その後、<form name="mainForm" action="Login" method="POST">タグの actionを TestからLoginに変更しただけで、Htmlファイルから実行をすると The requested resource (ファイルのパス名) is not available.と出力されます。 環境としてはEclipse3.4でTomcat6.0です。strutsは使用しておりません。 Javaファイルをコピーして新しいファイル名を実行しようとしたら 何か他にも変更や設定をしないといけないことがあるのでしょうか? 見落としがありますでしょうか? お手数ではございますがアドバイスをお願いします。

    • ベストアンサー
    • Java
  • PHP System関数が動作しません

    サーバー上の、あるphpファイル(sample_c.php)をシステム関数を使用して実行する必要があり、以下の流れのプログラムを作成しました。 sample_a.php でSubmit sample_b.php でSystem関数でsample_c.phpを呼び出し sample_c.php で実行 です。 <? /* sample_a.php */ ?> <form action="sample_b.php" method="post"> <input type="hidden" name="login" value="sample_user"> <input type="hidden" name="action" value="trigger_b"> <input type="submit" value="submit"> </form> <? /* sample_a.php */ ?> <? if($_POST['action'] =="trigger_b") { $login = $_POST['login']; system("sample_c.php $login"); header('Location: sample_a.php?action=fin'); exit; } else { header('Location: sample_a.php?action=error'); exit; } ?> <? /* sample_c.php */ ?> $_SERVER['argv'] で受け取った値を処理 ----------------- 3つのファイルは全て同じ階層に配置してあります。 sample_a.phpでsubmitすると、sample_a.php?action=fin にリダイレクトするのですが、 sample_c.php内の動作が実行されていません。 中身はDB接続して、テーブルに保存する単純なsql文が入っていて、sample_c.php単体での動作は確認しています。 (単体テストの場合は$_SERVER['argv']の代わりに変数に値をセットして実行しています。) System関数で変数を受け渡さずに system("sample_c.php $login"); を system("sample_c.php") として実行してもうまくいきません。; 原因が分かるかたがいらっしゃれば教えてください。 お願いします。

    • ベストアンサー
    • PHP
  • サーブレット、Strutsのスレッドの動きについて

    ここ教えてgooでもこの類の質問は多いですが、現在ある問題に直面しています。過去の質問を見てもピンと来るものがなかったので、2つ質問させてもらいます。 1. 1リクエスト1インスタンスではないことは過去の質問やブログでもわかりました。ということは1リクエスト(サブミット)1スレッドという解釈でよろしいでいいと思います。これを踏まえて例えさせてください。 10台の端末からほぼ同時に同一アクションへサブミットした場合、1つのインスタンスから10スレッドが生まれるということでいいでしょうか?今直面している問題は、トークンチェック等2重サブミット対応をしていない状態で、1台の端末(自分)でサブミットを連打した場合(例えば10回)、10台の端末から同時アクセスした場合と同じ状況になるのでしょうか? 2. 以下はソースのイメージです。 // アクションクラス BarAction継承クラス {  execute {   ~中略~   HogeLogic logic = new HogeLogic();   logic.doLogic();   ~中略~  } } // ロジック HogeLogicクラス {  //インスタンス変数  FooService service=new FooService();  doLogic {   ~中略~   service.insert();   ~中略~  } } 分かりづらかったら申し訳ないです。 言いたいことはBarAction#execute内でHogeLogicクラスを生成しています。ということは生成されたHogeLogicのインスタンス(logic)はスレッドセーフだと思います。 しかしHogeLogicクラスではFooService.serviceがインスタンス変数として宣言されています。 この場合、FooService.serviceはスレッドセーフなのでしょうか?

    • ベストアンサー
    • Java
  • cakePHPでFormを使用したDBへの登録

    cakePHP初心者です。 ブラウザで入力画面→確認画面→完了画面と遷移して、 DBに入力した値を登録する基本の動きをさせたいのですが、 Controllerの動きが分かりません。 Viewのファイルを 入力画面:entry.ctp 確認画面:confirm.ctp 完了画面:complete.ctp とします。 1.SampleControllerからentryページを表示 public function entry(){ } 2.etntry.ctpでFormを作成 <?php echo $this->Form->create('Sample', array('action' => 'confirm')) . PHP_EOL; ?> 3.SampleControllerでconfirmメソッドが呼ばれる public function confirm(){ if($this->request->is('post')){ データを画面にセット? } } 4.confirm.ctpが表示され、登録ボタンを押すと完了画面にFormを作成 <?php echo $this->Form->create('Sample', array('action' => 'complete')) . PHP_EOL; ?> 5.SampleControllerでcompleteメソッドが呼ばれる public function confirm(){ if($this->request->is('post')){ バリデーションチェック後、DBに登録? } } この流れでよいのでしょうか。 完了画面のcompleteでバリデーションチェックを行うことに違和感を感じています。 仮にconfirmで実施するとしても、書き方が良く分かりません。 <?php echo $this->Form->create('Sample', array('action' => 'confirm')) . PHP_EOL; ?> と書いたら、3の処理とかぶってしまいますよね・・・? 説明分かりにくくてすみません・・・。 ネットで調べつつやっていたのですが、一連の流れをすべて書いたサイトに見当たらず、 途方に暮れています。 どなたかご教示お願いします。

    • 締切済み
    • PHP

専門家に質問してみよう