2016-04-13 5 views
1

私のJSPに複数の選択ボックスがあります。ユーザーが最初の選択ボックスを選択したときに、そのActionクラスを使用してデータベースを照会する必要があります。 2番目の選択ボックス(など)。Struts 2 - Populate s:最初に基づいてサーバーから選択します。select

最初の選択ボックスの値を正しく表示して選択することはできますが、最初の選択ボックスに基づいて2番目の値をdbに問い合わせる方法を見つけることはできません。ここでは、最初の選択のために動作するコードです。第1選択に基づいて第2選択を得るための良いアプローチに関する提案は、非常に高く評価されるだろう。

JSP

<s:form action="fileUploadAction" method="post" enctype="multipart/form-data"> 
    <s:div> 
     <s:select label="Select #1:" list="select1Map" listKey="key" 
       listValue="value" name="select1" headerKey="-1" 
      headerValue="--Select a Value--"/> 
    </s:div> 
    <s:div> 
     <s:select label="Select #2:" list="select2Map" listKey="key" 
       listValue="value" name="select2" headerKey="-1" 
      headerValue="--Select an Value--"/> 
    </s:div> 

</s:form> 

struts.xml

<action name="fileUpload" class="fileUploadAction" method="display"> 
    <result name="success">/jsp/dataUpload/fileUpload.jsp</result> 
</action> 

FileUploadAction.java

public class FileUploadAction extends AbstractAction{ 
private Map<Object, String> select1Map; 
private Map<Object, String> select2Map; 

private FileUploadService service = null; 

public FileUploadAction(){ 
    super(); 
} 

public String display(){ 
    select1Map= service.getDataForDropDown(getUser().getId()); 
    select2Map = new HashMap<Object,String>(); 

    return SUCCESS; 
    } 
} 

答えて

1

ちょうどPRを宣言選択された値に対応するoperties、最初は空/ nullでないかどうかをチェック、その場合にも第2のマップをロード:

public class FileUploadAction extends AbstractAction{ 

    @Inject FileUploadService service; 

    @Getter   private Map<Object, String> select1Map; 
    @Getter   private Map<Object, String> select2Map; 

    @Getter @Setter private String select1; 
    @Getter @Setter private String select2; 

    public String display() { 
     select1Map= service.getDataForDropDown(getUser().getId()); 
     if (select1!=null) { 
      select2Map = service.getDataForDropDown2(select1); 
     } 
     return SUCCESS; 
    }  
} 

注:@Getter@SetterLombok annotationsあります。それは素晴らしいですし、私は戻って行くことはありませんが、ここで彼らはちょうど"ゲッターとセッターを入れて"を意味します。あなたはこのような何かしようとしているよう

+1

これはローリングしています...、ロンボクルールズ。 –

+1

@RomanCええ、名前やタイプを変更するたびに、ゲッターやセッターを消去して再生成する必要はありません。クラスの '@Data'を使用すると、一度にそれらのすべてを(時には便利です)... –

+0

Eclipseのようなものか、Strutsのメソッドの名前を付けて好きですか? –

0

はサウンド:このチュートリアルではhttp://tech.learnerandtutor.com/dynamic-drop-down-list-with-struts-2-and-ajax/

を、著者は最初の選択ボックスにのonChange()イベントを追加するためのjQueryを使用しています。ユーザーが最初のボックスの値を変更すると、jQueryはアクションクラス内のメソッドにAjaxリクエストを作成し、選択された現在の値に関連付けられたデータを返します。

+1

jQueryに慣れていないStruts2ユーザのためにこの操作を容易にするstruts2-jqueryプラグインがあります(あれば...):http://stackoverflow.com/a/25994676/1654265 –

関連する問題