3

ドロップダウン リストで選択した値をデータベースに保存したい。

最初index.jspに読み込まれます。の登録URLをクリックすると、からindex.jsp、に行くことができます。register.jspindex.jsp

struts.xml:

<action name="registerAction" class="action.RegisterAction" method="populateSelect">
        <result name="success" >register.jsp</result>
     
    </action>
    <action name="register" class="action.RegisterAction" method="execute">
        <result name="success" >login.jsp</result>

    </action>

index.jsp:

  <s:url id="url" action="registerAction">
</s:url>
  <s:a href="%{url}">Register</s:a>

register.jsp:

   <s:form action="registerAction" method="execute">
     <s:select label="Select Date of Month" key="Month List" name="months" headerKey="0" headerValue="--Select--" list="allMonths" listKey="id" listValue="name"/>
 <s:submit value="Register"/>
 </s:form>

アクション クラスは次のとおりです。

public class RegisterAction extends ActionSupport {

    String name, pwd, email, address, months;

    int phno;

    
    List<Month> allMonths = new ArrayList<Month>();
    List<User> users = new ArrayList<User>();
    UserDao udao = new UserDao();


public List<Month> getAllMonths() {
    return allMonths;
}

public void setAllMonths(List<Month> allMonths) {
    this.allMonths = allMonths;
}

public String getMonths() {
    return months;
}

public void setMonths(String months) {
    this.months = months;
}

public List<User> getUsers() {
    return users;
}

public void setUsers(List<User> users) {
    this.users = users;
}


public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getPhno() {
    return phno;
}

public void setPhno(int phno) {
    this.phno = phno;
}

public String getPwd() {
    return pwd;
}

public void setPwd(String pwd) {
    this.pwd = pwd;
}

    public RegisterAction() {
    }
    

    public String execute() throws Exception {
        User u = new User();
        u.setName(name);
        u.setEmail(email);
        u.setAddress(address);
        u.setPhno(phno);
        u.setPwd(pwd);
        System.out.println("Hi der "+months);

        u.setMonths(months);
        udao.addUser(u);
        return "success";
    }

    public String listAllUsers() {
        users = udao.getUsers();
        System.out.println("In Action, " + users);
        return "success";
    }


    public String populateSelect() {
        allMonths = udao.getMonths();
        System.out.println("In constructor " + allMonths);
        return "success";
    }
}

ドロップダウン リストは、実際にはフォーム フィールドの 1 つにすぎません。フォームには他のフィールドもあります。

月フィールド以外のすべての値をデータベースに入力できます。月フィールドの場合、入力される値は ですnull

ドロップダウンの値が取られていないと思います。

4

2 に答える 2

2

index.jsp登録ページにリダイレクトするコードを使用するだけで

<% response.sendRedirect("registerAction.action"); %>

フォームでは、フォーム属性を介してregister.jspマップされます。アクションマッピングはregisterActionaction

<action name="registerAction" class="action.RegisterAction" >
  <result name="success">register.jsp</result>
</action>

<action name="register" class="action.RegisterAction" method="register">
  <result name="input">register.jsp</result>
  <result name="success">login.jsp</result>
</action>

このマッピングはregister、コードで使用されるアクション クラスのメソッドに変更されmonths、アクションが実行される前に入力する必要がある指定された値で使用される新しいものを挿入します。input結果は、JSP の form タグの場所で使用されます。はlogin.jsp不明ですが、registerアクションの結果として使用されます。フォームの名前も変更する必要があります

<s:form action="register">
  <s:select label="Select Date of Month" key="Month List" name="months" headerKey="0" headerValue="--Select--" list="allMonths" listKey="id" listValue="name"/>
  <s:submit value="Register"/>
</s:form>

アクションのコードが変わります

private String months;
//public getter and setter of months

public String register() throws Exception {
    User u = new User();
    u.setName(name);
    u.setEmail(email);
    u.setAddress(address);
    u.setPhno(phno);
    u.setPwd(pwd);
    System.out.println(months);

    u.setMonths(months);
    udao.addUser(u);
    return "success";
}

private List<Month> allMonths;
//public getter and setter of allMonths

アクション クラスが を実装すると仮定しましたPreparable。検証が失敗した場合にリストが使用される可能性があるため、ここですぐに実行することをお勧めします。

public void prepare() throws Exception {
   //populate allMonths 
   //and set the value of months if you want it to be preselected.
}

ActionSupportアクションは、executeメソッドが既に実装されているを拡張する必要があります。

于 2013-09-24T21:05:21.257 に答える