2016-06-10 3 views
0

Ich verwende Struts2-Tags in JSP. Unten ist die Action Klasse.Wie Sie den Hasmap-Schlüssel und die Wertdaten in separaten Textfeldern von der Aktionsklasse von struts2 framework in JSP drucken?

package com.action; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Map; 
import java.util.List; 
import com.opensymphony.xwork2.ActionSupport; 
public class EmpLeavePlan extends ActionSupport{ 
private String bankId; 
private String empName; 
private String monthYear; 
private String leaves; 
private Map<String,String> bankIds; 
public String display() { 
    return "SUCESS"; 
} 
public String getDefaultSearchEngine() { 
    return "yahoo.com"; 
} 
public String execute() throws Exception 
{ 
    bankIds = new HashMap<String,String>(); 
    bankIds.put("1541742","h6"); 
    bankIds.put("1541742","eft"); 
    bankIds.put("1394842","dfd"); 
    bankIds.put("1541742","dfee"); 
     return "SUCCESS";} 
public String getBankId() { 
    return bankId; 
} 
public Map<String, String> getBankIds() { 
    return bankIds; 
} 
public void setBankIds(Map<String, String> bankIds) { 
    this.bankIds = bankIds; 
} 
public void setBankId(String bankId) { 
    this.bankId = bankId; 
} 
public String getEmpName() { 
    return empName; 
} 
public void setEmpName(String empName) { 
    this.empName = empName; 
} 
public String getMonthYear() { 
    return monthYear; 
} 
public void setMonthYear(String monthYear) { 
    this.monthYear = monthYear; 
} 
public String getLeaves() { 
    return leaves; 
} 
public void setLeaves(String leaves) { 
    this.leaves = leaves; 
}} 

JSP:

<%@ taglib uri="/struts-tags" prefix="s" %> 
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css"> 
    <script src="//code.jquery.com/jquery-1.10.2.js"></script> 
    <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script> 
    <link rel="stylesheet" href="/resources/demos/style.css"> 
    <script> 
    $(function() { 
     var currentDate = new Date(); 
     $("#datepicker").datepicker({ 
      changeMonth: true, 
      changeYear: true, 
      showButtonPanel: true, 
      dateFormat: 'MM yy' 
      /* onClose: function(dateText, inst) { 
       $(this).datepicker('setDate', new Date(inst.selectedYear, inst.selectedMonth, 1)); 
      } */ 

     }); 
     $("#datepicker").datepicker("setDate", currentDate); 


    }); 

    </script> 

    <style> 
.ui-datepicker-calendar { 
    display: none; 

    } 
    .ui-datepicker-year{ 

    width: 70px !important; 
    height: 25px; 
    } 
    .ui-datepicker-month{ 
    width: 60px !important; 
    height: 25px; 
    } 
    .ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all{ 
    width: 213px !important; 
    } 
</style> 
<h1> Leave Plan Management!!! </h1> 
<body style="background-color:lightgrey;"> 
<s:form action="bankgen"> 
<s:textfield name="monthYear" label="Month/Year" id="datepicker"></s:textfield> 
<%-- <s:select label="Select Bank ID" 
     headerKey="-1" headerValue="Select bank id" list="bankIds" 
     name="bankIdd" id="bankChange" /> --%> 
<s:select label="Select Bank ID" 
     headerKey="-1" headerValue="Select bank id" list="bankIds" 
     name="bankId" id="bankChange" />  

<s:textfield name="empName" label="Name" id="empName"></s:textfield> 
<s:textarea name="leaves" label="Leaves :" id="leaves"></s:textarea> 
<s:submit value="save"></s:submit> 

</s:form> 
</body> 

Aber ich bin nicht immer den Ausgang. Im Dropdown sind die Werte allein Reflexion und nicht der Schlüssel, der die Bank-ID ist. Ich möchte, dass die Bank-IDs in der Bank-ID-Spalte und die Schlüsselwerte in der Spalte "Emp-Name" stehen.

+0

Im die URL mit „http Einleitung: // localhost: 8080/Demostruts/selectAction.action "anstelle des direkten Aufrufs von jsp. Ich brauche die Bank-IDs, die in der Dropdown-Liste generiert werden, und den entsprechenden empName, um ein anderes Feld zu generieren. Also, ich habe hashmap benutzt. Im Struts-HTML-Tag gibt es "Liste" -Attribut .. Listenschlüssel und Listenwert. Aber ich bin mir nicht ganz sicher, wie der entsprechende empName im folgenden Feld gedruckt wird. –

+0

Sie werden 'empName' drucken, aber es ist nicht initialisiert. Es wird nicht gedruckt. –

+0

können Sie bitte erklären .. –

Antwort

0

Die bankIds mit entsprechenden empName werden in der Aktionsmethode bevölkerten

public String execute() throws Exception { 
    bankIds = new HashMap<String,String>(); 
    bankIds.put("1541742","h6"); 
    bankIds.put("1541742","eft"); 
    bankIds.put("1394842","dfd"); 
    bankIds.put("1541742","dfee"); 

    //before returning to JSP you should set empName 
    empName = bankIds.get(bankId); 

    return "SUCCESS"; 
} 

Sie nicht initialisieren bankId so wäre es nicht beim ersten Mal leer sein. Nachdem Sie das Formular abgeschickt haben, wird die bankId ausgefüllt und die entsprechende empName wird initialisiert. Beide Werte werden in Struts-Tags vorausgewählt. Da Sie das Attribut value nicht verwendet haben, wird der Wert mit dem Attribut name ausgewertet.

Sie können zwei Aktionsmethoden verwenden: eine für das Rendern von JSP mit der HTTP-Methode GET und eine weitere für das Senden eines Formulars mit der Methode POST http. Wenn bankId gebucht wird, sollte die bankIds Karte bereits ausgefüllt sein. Sie sollten also eine andere Methode prepare() verwenden, um die Karte bankIds zu füllen. Um automatisch aufgerufen zu werden, bevor die Aktion ausgeführt wird und die Ergebnis-JSP zurückgegeben wird, sollte die Aktionsklasse die Schnittstelle Preparable implementieren.

public class EmpLeavePlan extends ActionSupport implements Preparable { 
    ... 
    public void prepare() { 
     bankIds = new HashMap<String,String>(); 
     bankIds.put("1541742","h6"); 
     bankIds.put("1541742","eft"); 
     bankIds.put("1394842","dfd"); 
     bankIds.put("1541742","dfee"); 
    } 

    public String executeGet() throws Exception { 

     //before returning to JSP you should set empName 
     empName = bankIds.get(bankId); 

     return "SUCCESS"; 
    } 

    public String executePost() throws Exception { 

     //before returning to JSP you should set empName 
     empName = bankIds.get(bankId); 

     return "SUCCESS"; 
    } 
    ... 
} 

Wenn Sie empName aktualisieren, wenn Sie aus dem Drop-Down wählen dynamisch mit Javascript

<s:select label="Select Bank ID" 
     headerKey="-1" headerValue="Select bank id" list="bankIds" 
     name="bankId" id="bankChange" />  

<s:textfield name="empName" label="Name" id="empName" /> 
<script> 
$(function(){ 
    $("#bankChange").change(function(){ 
    $("#empName").val($(this).val()); 
    }); 
}); 
</script> 

+0

Roman, danke für die Korrektur.Ich bin nie auf die Preparate-Methode gestoßen und führeget oder executepost aus, sondern führe einfach() aus. Kannst du mir das bitte sagen? wie die struts.xml aussehen würde –

+0

/index.jsp /success.jsp /index.jsp -> –

+0

die oben ist meine aktuelle struts.xml –

Verwandte Themen