• 締切済み

パラメータのやりとり

3つのクラスの中でHTML上から取得したパラメータをやり取りしたいと思っています。 1つ目のクラス(CLASS_1.java) public class CLASS_1 extends CLASS_0 { public void doMain(HttpServletRequest request,HttpServletResponse response){ try{ String[] str = makeItem(request); CLASS_2 class_2 = new CLASS_2(); class_2.setItem(str); private String[] makeItem(HttpServletRequest request){ String[] result = new String[3]; result[0] = request.getParameter("test1"); result[1] = request.getParameter("test2"); result[2] = request.getParameter("test3"); return result; 2つ目のクラス(CLASS_3.Java) public class CLASS_3{ public void setItem(String[] data){ } public boolean makeTEXT(){ return true; } public ByteArrayOutputStream getTEXT(){ return null; } } 3つ目のクラス(CLASS_2) public class CLASS_2 extends CLASS_3 { public boolean makeTEXT(){ return true; } } という3つのクラスを作成しました。 CLASS_1で取得したstrの中の値をCLASS_2で使用したいと考えています。 ただ羅列するだけでかまいませんので、わかるかたヒントや参考になりそうなHPなどありましたら よろしくお願いします。

  • ARCIE
  • お礼率75% (22/29)
  • Java
  • 回答数3
  • ありがとう数3

みんなの回答

回答No.3

class_2.setItem(str); ↑を実行すると Class3の public void setItem(String[] data){ } が呼ばれてますが、何も処理がないので値を保持するもないですよね? Class3に以下を追加すれば private String[] item; public void setItem(String[] data){ item = data; } public String[] getItem(){ return item; } Class2でgetItemすれば値が取得できるのではないかなーと。

ARCIE
質問者

お礼

自己解決しましたが。 ほとんど回答いただいたものと同じでした。 ありがとうございました。

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.2

> 3つのクラスの中でHTML上から取得したパラメータをやり取りしたいと思っています。 残念ながら、何故できないのか、まったく伝わってきません。 どこまで理解して、どこがわかりませんか?

ARCIE
質問者

お礼

自分の力量が足りないのでうまく説明することができませんでした。 回答ありがとうございました。

回答No.1

class1のインスタンスを取得できないものとして回答します ・class1で外部に渡したいデータをstaticで宣言する  static String hoge; ・外部に公開したいデータをreturnする関数をstaticで宣言する  (むろん中身書くこと)  static public String hogehoge() とすれば、どこのクラスからでも String s = CLASS_1::hogehoge(); で取り出せます

ARCIE
質問者

お礼

自己解決しました。 回答ありがとうございました。

関連するQ&A

  • struts2のchainで値の受け渡しができない

    Java 6 Update 22 struts2.2.1 です。 次のとおり各クラスとstruts.xmlを作成しました。 Top_guestLoginアクションを実行してHelloUserクラスに遷移することはできましたが、変数isGuestModeの値が受け渡しされません。 public class Top implements SessionAware { private boolean isGuestMode = false; public boolean getIsGestMode() { return isGuestMode; } public String guestLogin() throws Exception { isGuestMode = true; return "success"; } } public class HelloUser { private boolean isGuestMode; public boolean getIsGuestMode() { return isGuestMode; } public void setIsGestMode(boolean b){ isGuestMode = b; } public String execute() throws Exception { return "success" ; } } struts.xml <package name="example" extends="struts-default"> <action name="HelloUser" class="example.HelloUser"> <result>/example/HelloUser.jsp</result> </action> <action name="Top_guestLogin" method="guestLogin" class="example.Top" > <result name="success" type="chain" >HelloUser</result> </action> </package> 何方かアドバイスをお願い致します。

    • ベストアンサー
    • Java
  • スレッドセーフ?スレッドアンセーフ?

    Struts2にてスレッドセーフを勉強しており 以下のコードがスレッドセーフなのか、それともスレッドアンセーフなのかご意見を頂きたいと思います。 個人的な意見ですが、インスタンス変数を利用しているためスレッドアンセーフになるのではないかと思いますが間違いございませんでしょうか。 //以下 Struts2 public class InsertProgram extends ActionSupport implements ServletRequestAware{ private Test test = new Test(); private String id; private String name; public class execute(){ id     = request.getParameter("id"); name = request.getParameter("name");        //以下がご意見を頂きたい箇所です。 test.setId(id); test.setName(name); test.insert(); return SUCCESS; } } public class Test{ private String id; private String name; public String getId() { return id; } public String getName() { return name; } public void setId(String id) { this.id = id; } public void setName(String name) { this.name = name; } public class insert() { //割愛致します。 データベースにid 及び name をinsert します。 sql = "Insert into test_db(id , name) ・・・" } }

    • ベストアンサー
    • Java
  • フォームBeanのメソッド内で変数の呼び出しでエラーとなる

    初歩的な質問かと思いますが、下記について教えてください。 以下のようなソースがあり、フォームBeanのvalidateメソッドのところで 検証を行うプログラムを書きたいと思っています。 しかし、(1)のところで、InputForm クラスの外で定義している変数を扱う ことができず、以下のエラーが発生します。 エラー: No variable or field with this name could be found at this location. どのようにすれば、フォームBeanの中でtest1などの値を呼び出すことができますか? なぜ、呼び出すことができないのでしょうか? よろしくお願いいたします。 ================================== public class controller extends PageFlowController { String test1 ="aaa"; ・・・ /** * @jpf:action * @jpf:forward name="success" path="index.jsp" */ protected Forward form() {   //ここでtest1は呼び出せる。 string test2= test1; ・・・ } ・・・ public static class InputForm extends FormData { private String str1; ・・・ public void setStr1(String str1) { this.str1 = str1; } public String getStr1() { return this.str1; } ・・・ public ActionErrors validate(ActionMapping arg0, HttpServletRequest arg1) { ・・・     //ここでtest1を呼び出すことができない。 String tmp = test1; ・・・ }   } }

    • ベストアンサー
    • Java
  • 入力フォーム(JSP)にDB検索条件を入力し、データがなかった場合入力した値を残したままJSPに戻る方法を教えてください。

    基本的にはタイトルの質問なんですが、具体的な書き方がわかりません。 今作成しているのが TOP画面(JSP) ・入力フォームに検索条件 ↓ Servlet ・入力された条件でDB検索  何か検索されれば次画面へ遷移  何も検索されなければTOP画面へ戻る というものですが、 public class LoginCheck1 extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = response.getWriter(); String user = request.getParameter("user"); String pass = request.getParameter("pass"); HttpSession session = request.getSession(true); boolean check = authUser(user, pass); if (check){ /* 認証済みにセット */ session.setAttribute("login", "OK"); /* 本来のアクセス先へ飛ばす */ String target = (String)session.getAttribute("target"); response.sendRedirect(target); }else{ /* 認証に失敗したら、ログイン画面に戻す */ session.setAttribute("status", "Not Auth"); response.sendRedirect("/auth/Login"); } } protected boolean authUser(String user, String pass){ /* 取りあえずユーザー名とパスワードが入力されていれば認証する */ if (user == null || user.length() == 0 || pass == null || pass.length() == 0){ return false; } return true; } } サーブレットはこんな感じで書いてるんですが、 response.sendRedirect("/auth/Login"); の部分が悪いんでしょうか?

    • ベストアンサー
    • Java
  • Javaのプログラムについて至急教えてください!

    //Sub.java class Super{ public void A(){} } class Sub extends Super{ /* (1) */ } このプログラムの(1)に入るものを下から2つ選んで他のクラスのメインメソッドから呼び出すのですがどうやってもわかりません。わかる方教えてください! public void A(){} public String A(){ return "pool";} public int A(String str){return Integer.parseInt(st);} public int A(){return 3;} public Object A(){return new Object();}

    • ベストアンサー
    • Java
  • 宣言のタイミング

    質問させてください。 Servletの中で、他クラスからの参照のできる static final String について何ですが、 例えば、 public class goo extends HttpServlet{ static final String CODE = "text/html;charset=Shift_JIS"; public void doPost(HttpServletRequest req,HttpServletResponse res) thows servletException,IOException{ res.setContentType(CODE); など、実際の値を入れるやり方は、分かるのですが、 Servlet内で、何らかの処理後の String を static final String 宣言をするには、どうしたらよいのでしょうか? 例えば、 public class goo extends HttpServlet{ public void doPost(HttpServletRequest req,HttpServletResponse res) thows servletException,IOException{ String para = req.getParameter(para); String param = new String(para.getBytes("8859_1"),"JISAutoDetect"); 等の時に、paramを static final String にしたいのです。 自分でも文法が出来てないとは思いますが、よろしくお願いします。

    • ベストアンサー
    • Java
  • WebWork(struts2)でのパラメータの取得について

    こんにちは。 環境:Webwork & Velocity(xwork2) & Tomcat5.5 & JDK 1.6 Action部がだいぶすっきりしましたが、requestのパラメータの取得が分かりません。 一般的なActionSupportを継承しているのですが、thisからHTTPRequestらしきGetterもありませんし・・。 やろうとしている事は'XXX.action?id=YYY'のように、URLからパラメータをgetしたいのですが。 ■JavaScript var url = "XXX.action?id=test"; ※Ajaxでリクエストしてますが省略します。 ■XML <action name="XXX" class="aaa.XXXAction">  <result name="menu" type="plainText">   /WEB-INF/classes/aaa/menu.html  </result>  <result name="test" type="plainText">   /WEB-INF/classes/aaa/test.html  </result> </action> ■Action public class XXXAction extends ActionSupport {  public String execute() throws Exception {   return SUCCESS; //←ここでURLにくっついたパラメータを返したい お分かりになりましたら、よろしくお願いします。

    • ベストアンサー
    • Java
  • 入力フォーム(JSP)にDB検索条件を入力し、データがなかった場合入力した値を残したままJSPに戻る方法を教えてください。

    基本的にはタイトルの質問なんですが、具体的な書き方がわかりません。 今作成しているのが TOP画面(JSP) ・入力フォームに検索条件 ↓ Servlet ・入力された条件でDB検索  何か検索されれば次画面へ遷移  何も検索されなければTOP画面へ戻る というものですが、 public class LoginCheck1 extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = response.getWriter(); String user = request.getParameter("user"); String pass = request.getParameter("pass"); HttpSession session = request.getSession(true); boolean check = authUser(user, pass); if (check){ /* 認証済みにセット */ session.setAttribute("login", "OK"); /* 本来のアクセス先へ飛ばす */ String target = (String)session.getAttribute("target"); response.sendRedirect(target); }else{ /* 認証に失敗したら、ログイン画面に戻す */ session.setAttribute("status", "Not Auth"); response.sendRedirect("/auth/Login"); } } protected boolean authUser(String user, String pass){ /* 取りあえずユーザー名とパスワードが入力されていれば認証する */ if (user == null || user.length() == 0 || pass == null || pass.length() == 0){ return false; } return true; } } サーブレットはこんな感じで書いてるんですが、 期待する結果は アカウント 12345 パスワード abcde と入力してそれがDBに登録してなかった場合 アカウント 12345 パスワード abcde と入力値がそのままで戻って欲しいのですが 今は、 アカウント  パスワード     と消えて表示されます。 response.sendRedirect("/auth/Login"); の部分が悪いんでしょうか?

    • ベストアンサー
    • Java
  • 単体テストのテストケースにて引数に値を入れたいです

    使用言語:JAVA言語 単刀直入ですが、djunitでの単体テストのメソッドの引数に値を設定したいですがどうすればいいのでしょうか? 引数がString型 Messageクラス public class Messages { public String getMessage(String message) { return message ; } } テストケース作成 public void testGetMessage001() { System.out.println("[testGetMessage001]"); Messages messages = new Messages(); System.out.println(messages.getMessage("Hello")); } とやれば、インスタンス生成してgetmessageメソッドにHelloが入ります。 問題は次の場合で仮にAxxクラスとして Public class Axx{     Public void getAxx(HttpServletRequest request){ ~処理~ } } 引数に(クラス名 オブジェクト名?) この場合、テストケースに Axx axx = new Axx(); System.out.println(messages.getAxx("????")); のようにMessageクラスと同じようにできるのでしょうか? それとも別の方法でHttpServletRequest requestに値をセットできる方法があるのでしょうか? よろしくお願い致します。

    • ベストアンサー
    • Java
  • 親クラスから子クラスへアクセス。

    親クラスから子クラスへアクセス。 お世話になります。 以下のプログラムについて考えています。 public class Main{  public static void main(String[] args) {   SubA subA = new SubA();   SubB subB = new SubB();   Super[] subs = {subA,subB};   subs[1].method();   subs[2].method();  } } class Super{  String str = "親";  public void method(){   System.out.println(str);  } } class SubA extends Super{  String str = "子A"; } class SubB extends Super{  String str = "子B"; } この場合、出力結果は当然 親 親 になります。 これを子クラスの str を表示するようにしたいのです。つまり 子A 子B です。 ただし、子クラスで method() をオーバーライドしたり、super.str = "子A" のように親クラスを書きかえずにです。 子クラスが何百種類もある場合、全く同じmethod()を書く無駄や、変更があったときにそれを全てを修正しなければならないことを避けたいのです。 何か良案がありましたら、ぜひご教授ください。よろしくお願いします。

専門家に質問してみよう