質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.52%

htmlで作成した可変長リストをjavaで取得する。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,945

settyan

score 46

いつもお世話になっております。
早速本題に入らせていただきます。

やりたいこと

html側で動的に作成したリストをjava側で取得したいです。

環境

struts2、java、javascript、html使用して製作しています。
javaを用いているため、htmlはjspファイルに記述しています。

実際のコード

private List<String> rList;

public List<String> getrList() {
   return rList;
}

public void setrList(List<String> rList) {
   this.rList = rList;
}

//ボタンを押した時にNullチェック(仮処理)
public String debug() throws Exception {
    if((this.rList)  == null){
        System.out.println("null");
    }else{
        System.out.println("Notnull");
    }
    return "success";
}
<s:form name="mit" >
    <div id="tab1" class="tab">
        <h2>画面</h2>
        <font color="red"><b><s:property value="errmsg" /></b></font>
        <div class="ib-box" style="padding-right: 50px; padding-left: 10px;">あああ</div>


        <!-- その他処理-->

        <!-- ボタン -->
        <div class="ib-box" >
            <div class="buttonGroup">
                <s:submit method="debug" value="削除"/>
            </div>
        </div>
        <!-- 送りたいリスト -->
        <div class="ib-box" >
           <form name="recipientList" action="" >
               <input type="submit" value="送信" />
               <select id="rList" name="rList" multiple  style="width: 140px;" size="10"  ></select>
           </form>
      </div>

        <!-- その他処理-->    
    </div>
</s:form>
//動的生成部分
function OnceSelect(){
     var i
     , eList = document.getElementById( 'eList' )
     , rList = document.getElementById( 'rList' )
     , eListoptions = eList.options
     , el = eListoptions.length
     , rListoptions = rList.options
     , rl = rListoptions.length
     , option;

     for ( i = 0; i < el; i++ ) {
        if ( eListoptions[ i ].selected === true ) {
            for ( j = 0; j < rl; j++) {
                if(eListoptions[ i ].text === rListoptions[ j ].text) return;
            }
          option = document.createElement( 'option' );
            option.innerHTML = eListoptions[ i ].text;
            option.setAttribute( 'value', eListoptions[ i ].value );
            rList.appendChild( option );
            }
        }

のような実装をしています。(フェイクのため誤字脱字があるかも知れません)

補足
今現在のstruts2のやり方をしていますが、もうどんな形でもいいのでjava側に値が返ればいいと思っています。
htmlは初心者のため、できれば詳しい説明をしていただけるとうれしいです。
どうかよろしくお願いします。

改修点

<div id="tab1" class="tab">

    <h2>画面</h2>
    <font color="red"><b><s:property value="errmsg" /></b></font>
    <div class="ib-box" style="padding-right: 50px; padding-left: 10px;">あああ</div>

    <!-- その他処理-->  

    <!-- ボタン郡 -->
    <div class="ib-box">
        <div class="buttonGroup">
              <s:submit method="debug" value="削除" />
        </div>
    </div>

     <!-- 右側リスト -->
    <div class="ib-box">
        <form name="recipientList" action="">
            <input type="submit" value="送信" />
            <select id="rList" name="rList" multiple style="width: 140px;" size="10">
            </select>
        </form>
    </div>



    <s:form name="mit" onSubmit="return check()">
    <!-- その他処理-->          
    </s:form>
</div>


上記のようにしましたが依然Nullが返ってきてしまいます。

F12キーで確認してみると、

<select id="rList" name="rList" multiple style="width: 140px;" size="10">
      <option value="value値">田中太郎</option>
</select>

のような形で生成されているので生成ミスではないと思うのですが。
ご教授のほうよろしくお願いします。

Actionクラス

package action;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.apache.struts2.config.Result;
import org.apache.struts2.config.Results;
import org.apache.struts2.dispatcher.ServletRedirectResult;

import bean.DivisionCodeBean;
import bean.MonthBean;
import bean.PushInfoBean;
import bean.RecipientBean;

import com.opensymphony.xwork2.ActionChainResult;

import dao.DivisionCodeDAO;
import dao.PushInsertDAO;
import dao.RecipientDAO;


@Results({
    @Result(name = "pv", value = "pV", type = ActionChainResult.class),
    @Result(name = "psa", value = "pS", type=ServletRedirectResult.class)
})

public class PSA extends AbstractAction {
    private static final long serialVersionUID = 1L;


        //メンバー郡
    public String Id;
    public String pass;
    public String code;
    public int s_code = 0;
    public String year;
    public String month;
    public String date;
    public String errmsg;
    public String hon;

    //今日の日付取得
    Calendar cal = Calendar.getInstance();
    Date now = new Date();
    SimpleDateFormat sdf1 = new SimpleDateFormat("YYYY/MM");
    String nowdate= sdf1.format(now);

    public String Name;


    public String execute() throws Exception {

        if((this.rList)  == null){
            System.out.println("null");
        }else{
            System.out.println("Notnull");
        }

        this.LoginName = (String)this.sessionMap.get("Name");
        this.userId = (String)this.sessionMap.get("Id");

        DDAO dcDAO = new DDAO();
        dcBean = dcDAO.getDC();
        pC = dcBean.getDList();

        if(this.division_code == null){
            RDAO rDAO = new RDAO();
            rBean = rDAO.getData_R();
            pR = rBean.getRDate_List();
        }else{
            RDAO rDAO = new RDAO();
            s_d_code = Integer.parseInt(this.d_code);
            if(s_d_code == 0){
                rBean = rDAO.getData_R();

            }else{
                rBean = rDAO.getData_R(s_d_code);
            }
            pR = rBean.getRtDate_List();
        }
        return "success";
    }

        public String search() throws Exception {
        return "pv";
    }

    public String debug() throws Exception {
        if((this.rList)  == null){
            System.out.println("null");
        }else{
            System.out.println("Notnull");
        }
        return "success";
    }


    @SuppressWarnings("unchecked")
    public String s() throws Exception {

        RDAO rDAO = new RDAO();
        s_d_code = Integer.parseInt(this.d_code);

        if(s_d_code == 0){
            rBean = rDAO.getData_R();
        }else{
            rBean = rDAO.getData_R(s_n_code);
        }
        pR = rBean.getRDate_List();

        PIDAO pDAO = new PIDAO();
        pDAO.iP(103, this.hon, pR);


        this.errmsg = "qqqqqq";
        return "psa";
    }

    public DBean getModeler1() {return dcBean;}
    public ArrayList<DCBean> getLister1(){return pC;}
    public void setLister1(ArrayList<DCBean> lister1) {this.pC = lister1;}

    public RBean getModeler() {return rBean;}
    public ArrayList<RBean> getLister2(){return pR;}
    public void setLister2(ArrayList<RBean> lister2) {this.pR = lister2;}

    //リストグループ取得用
    private List<String> rList;
    public List<String> getrList() {return rList;}
  public void setrList(List<String> rList) {this.rList = rList;}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+2

<s:form>の中に、さらに<form>があるため、これではフォームの内容が正しく送信されない可能性があります。
1つのHTML内に<form>は複数あっても問題ありませんが、<form>内に<form>を入れ子にしてはいけません。

まずはフォームで送信する内容を整理することと、JavaScriptで動的にHTMLを作っているのであれば、その内容をデバッグモード(F12)で確認しましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/07/11 11:48

    上記改修点のようにformを見直しましたが依然Nullが返ってきてしまいます。
    F12キーで確認してところ生成はできていました。

    キャンセル

  • 2016/07/11 18:00

    残り考えられる原因は2つほどあります。

    (1)Actionクラスの実装と、設定ファイルの内容が誤っている - Actionクラスの実装が書かれていませんので、これについては現状コメントしにくい状態です。
    (2)念のためStruts2のバージョンならびに利用しているプラグインや拡張している箇所を明示していただければ、解明できるかと思います。

    ※<form action=""> の空文字はあまり良くないと思いますが…。

    キャンセル

  • 2016/07/12 09:13

    ご解答ありがとうございます。
    Actionクラスは上記の更新させていただきました。
    Struts2の導入はhttp://www.cyokodog.net/blog/first-struts2/こちらのサイト様を参考に導入させていただきました。
    Verは2.3.29です。
    何卒よろしくお願いします。

    キャンセル

  • 2016/07/19 09:14

    別の方法でやろうと思います。貴重なお時間ありがとうございました。

    キャンセル

check解決した方法

0

この方法でのやり方はあきらめました

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る