4

タイトルにjspフォームから複数の行を挿入する際に問題があると書かれているので、あなたの助けが必要です。コードは、このサイトからの回答からのものです。

コントローラ

@ModelAttribute("programform")
public ProgramForm populatePojos() {
    // Don't forget to initialize the pojos list or else it won't work
    ProgramForm programform = new ProgramForm();
    List<Programs> programs = new ArrayList<Programs>();
    for(int i=0; i<2; i++) {
        programs.add(new Programs());

    }
    programform.setPrograms(programs);
    return programform;
}




@RequestMapping(value = "/createprog")
public ModelAndView tiles2(@ModelAttribute("programform") ProgramForm  programform,
        BindingResult result) {
    //Map<String, Object> model = new HashMap<String, Object>();
    //model.put("articles",  articleService.listArticles());

    return new ModelAndView("createprogram");
}


@RequestMapping(value = "/saveprogram", method = RequestMethod.POST)
public ModelAndView saveProgram(@ModelAttribute("programform") ProgramForm  programform,
        BindingResult result) {
    for(Programs programs : programform.getPrograms()) {
           System.out.println(programs.getProgram_id());
           articleService.addProgram(programs);
        }

jsp

 <c:url var="saveProgramUrl" value="/articles/saveprogram.html" />
<form:form modelAttribute="programform" method="POST" action="${saveProgramUrl}">
<table>
<tr>
            <th>ProgramId</th>
            <th>Date</th>
            <th>Type</th>
            <th>Start</th>
            <th>End</th>
            <th>Location</th>
            <th>User</th>
            <th>Program Name</th>
</tr>
    <tr> 
                <th><form:input path="programs[0].program_id" /></th>
                 <th> <form:input path="programs[0].date" id="datepick" class="date-pick"/>
        <script type="text/javascript">
            datepickr('datepick', { dateFormat: 'Y-m-d' });
        </script></th>
                <th><form:input path="programs[0].type" /></th>
                <th><form:input path="programs[0].start" /></th>
                <th><form:input path="programs[0].end" /></th>
                <th><form:input path="programs[0].location" /></th>
                <th><form:input path="programs[0].user_id" /></th>
                <th><form:input path="programs[0].program_name" /></th>
    </tr>
 <tr> 
                <th><form:input path="programs[1].program_id" /></th>
                 <th> <form:input path="programs[1].date" id="datepick" class="date-pick"/>
        <script type="text/javascript">
            datepickr('datepick', { dateFormat: 'Y-m-d' });
        </script></th>
                <th><form:input path="programs[1].type" /></th>
                <th><form:input path="programs[1].start" /></th>
                <th><form:input path="programs[1].end" /></th>
                <th><form:input path="programs[1].location" /></th>
                <th><form:input path="programs[1].user_id" /></th>
                <th><form:input path="programs[1].program_name" /></th>
    </tr>
</table>
<br/>
<input type="submit" value="Insert User" />
</form:form>

プログラム

    package net.roseindia.model;



import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "program")
public class Programs {




    @Id
    @Column(name = "Program_Id")
    private int program_id;
    @Column(name = "Date")
    private String date;
    @Column(name = "Duty_Type")
    private String type;
    @Column(name = "Duty_Start_Time")
    private String start;
    @Column(name = "Duty_End_Time")
    private String end;
    @Column(name = "Location")
    private String location;
    @Column(name = "User_Id")
    private int user_id;
    @Column(name = "Program_Name")
    private String program_name;


    public int getProgram_id() {
        return program_id;
    }


    public void setProgram_id(int program_id) {
        this.program_id = program_id;
    }


    public String getDate() {
        return date;
    }


    public void setDate(String date) {
        this.date = date;
    }


    public String getType() {
        return type;
    }


    public void setType(String type) {
        this.type = type;
    }




    public String getStart() {
        return start;
    }


    public void setStart(String start) {
        this.start = start;
    }


    public String getEnd() {
        return end;
    }


    public void setEnd(String end) {
        this.end = end;
    }


    public String getLocation() {
        return location;
    }


    public void setLocation(String location) {
        this.location = location;
    }


    public int getUser_id() {
        return user_id;
    }


    public void setUser_id(int user_id) {
        this.user_id = user_id;
    }


    public String getProgram_name() {
        return program_name;
    }


    public void setProgram_name(String program_name) {
        this.program_name = program_name;
    }


    public Programs() { 

    }





}

ProgramForm

package net.roseindia.model;

import java.util.List;

public class ProgramForm {



    private List<Programs> programs;

    public List<Programs> getPrograms() {
        return programs;
    }

    public void setPrograms(List<Programs> programs) {
        this.programs = programs;
    }


}

これをデータベースに挿入されていないプログラムに保存するためにボタンを押すと、何が間違っていますか?

4

1 に答える 1

1

複数の行を追加するには、リストを遅延初期化する必要があります。以下のようにコードを変更して@ModelAttribute("programform")から、もう一度お試しください。

@ModelAttribute("programform") 
public ProgramForm populatePojos() { 
    // Don't forget to initialize the pojos list or else it won't work 
    ProgramForm programform = new ProgramForm(); 
    List<Programs> programs = LazyList.decorate(new ArrayList<Programs>(), FactoryUtils.instantiateFactory(Programs.class));

    for(int i=0; i<2; i++) { 
        programs.add(new Programs()); 

    } 
    programform.setPrograms(programs); 
    return programform; 
}

上記のようにリストを非正規化すると、javascriptを使用して実行時にフィールドを追加し、それらの値をリストにバインドすることもできます。

この変更を行った後、機能しない場合は、jspページで変更を行う必要があります。use simpleタグを使用する代わりに、ここでpath属性で指定したのと同じ値をname属性で指定することを忘れないでください。

これがお役に立てば幸いです。乾杯。

于 2012-06-04T09:20:05.560 に答える