0

我目前正在使用 spring mvc 开发一个简单的 Web 应用程序,并且我在我的 jsp 页面中使用 spring 表单。

我有一个包含多行的网格,并且要选择每一行来执行基本的 CRUD 操作(可以选择多行来创建场景)。如何持久化使用复选框选择的每一行(bean 列表:每一行都是一个 bean 对象)。

我在很多论坛上搜索过这个,但找不到任何我可以使用的好例子。

public class Contact {
private String firstname;
private String lastname;
private String email;
private String phone;

public Contact() {
}

public Contact(String firstname, String lastname, String email, String phone) {
    this.firstname = firstname;
    this.lastname = lastname;
    this.email = email;
    this.phone = phone;
}}

这是列表对象

public class ContactForm {

private List<Contact> contacts;

public List<Contact> getContacts() {
    return contacts;
}

public void setContacts(List<Contact> contacts) {
    this.contacts = contacts;
}}

我在我的jsp页面中尝试了这个,但它不起作用......

    <c:forEach items="${contactForm.contacts}" var="contact" varStatus="status">
    <tr>
        <td align="center">${status.count}</td>
        <td><input name="contacts[${status.index}].firstname" value="${contact.firstname}"/></td>
        <td><input name="contacts[${status.index}].lastname" value="${contact.lastname}"/></td>
        <td><input name="contacts[${status.index}].email" value="${contact.email}"/></td>
        <td><input name="contacts[${status.index}].phone" value="${contact.phone}"/></td>
    </tr>
</c:forEach>

控制器代码。

@Controller
public class ContactController {


private static List<Contact> contacts = new ArrayList<Contact>();

static {
    contacts.add(new Contact("Barack", "Obama", "barack.o@whitehouse.com", "147-852-965"));
    contacts.add(new Contact("George", "Bush", "george.b@whitehouse.com", "785-985-652"));
    contacts.add(new Contact("Bill", "Clinton", "bill.c@whitehouse.com", "236-587-412"));
    contacts.add(new Contact("Ronald", "Reagan", "ronald.r@whitehouse.com", "369-852-452"));
}

@RequestMapping(value = "/get", method = RequestMethod.GET)
public ModelAndView get() {

    ContactForm contactForm = new ContactForm();
    contactForm.setContacts(contacts);

    return new ModelAndView("add_contact" , "contactForm", contactForm);
}

@RequestMapping(value = "/save", method = RequestMethod.POST)
public ModelAndView save(@ModelAttribute("contactForm") ContactForm contactForm) {
    System.out.println(contactForm);
    System.out.println(contactForm.getContacts());
    List<Contact> contacts = contactForm.getContacts();

    if(null != contacts && contacts.size() > 0) {
        ContactController.contacts = contacts;
        for (Contact contact : contacts) {
            System.out.printf("%s \t %s \n", contact.getFirstname(), contact.getLastname());
        }
    }

    return new ModelAndView("show_contact", "contactForm", contactForm);
}
}

该示例发布在其中一个论坛中,我选择将其用作模板并根据我的应用程序中的需要使用它...但是在控制器中,该示例具有静态块,其中的值是硬编码的,而是我想添加来自 jsp 页面的值并将 bean 对象列表发送回控制器以将其保存在数据库中。请向我提供有关如何在 jsp 页面中使用弹簧表单的建议,以便我可以将 bean 对象列表发送回控制器。

4

1 回答 1

0

由于您希望列表最初为空,因此您不能使用<c:forEach>它来迭代它。

我建议您检查硬编码示例生成的 html。然后尝试“模仿” javascript 中的行为以动态添加所需的字段。如果列表最初不为空,则这些字段应该具有 spring 生成的名称。

于 2013-11-05T16:07:05.823 回答