form:选择返回以逗号分隔的列表

时间:2015-03-19 09:56:47

标签: java jsp spring-mvc

昨天早上有人引导我走向春天的MVC形式,从那以后我一直在努力做一个看似非常简单的任务!它看起来像一个简单的解决方案,但我似乎无法做到正确。我想我一定是误解了一些非常根本的东西,无法让它发挥作用。我想知道是否有人可以指出我哪里出错了?

目前我所要做的就是在jsp选择中显示一个值列表 模型实体非常简单(我意识到需要一点微调)

@Entity
@Table(name = "user")
public class User {

@Id  private String userId; 
private String userName;
private String passwordCode;
private Date dateOfBirth;

public String getUserId() {
    return userId;
}

public String getUserName() {
    return userName;
}

public String get PasswordCode () {
    return passwordCode;
}

public Date getDateofBirth() {
    return dateOfBirth;
}
}

我的控制器目前也很简单

@Controller
@RequestMapping("/")
public class HomeController  extends JFrame { 

@Autowired private MeetingDAO meetingDAO;

@RequestMapping(method = RequestMethod.GET)
    public String HomePage(Model model) {

        List<User> userlist = userDAO.ListAll();
        model.addAttribute("userlist ", userlist);
        model.addAttribute("User", new User());

        return "Home";
    }

我通过在堆栈溢出时使用另一个q / a得到了这一点,我想知道这是否是我的误解起源的地方。我正在将值列表作为属性传递给我。我做了很多错误,直到我意识到我还需要'传递'User模型,以便jsp中的spring标签能够理解User对象的结构。这意味着我现在传递2个属性 - 用户,因为我理解它只是因此表单理解结构(尽管如果我更聪明,这也会返回所选对象?)和用户列表,这是实际数据。

在jsp中

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<html>
<body>

    <h2>Users List Page</h2>

    <form:form action="/home" method="Post" modelAttribute="User" >
        <form:select path="userName">
            <form:options items="${userlist}"/>
        </form:select>

        <input type="submit" id="submit" value="View"/>
    </form:form>
</body>
</html>

为了简单起见,我将其配对,但尝试了很多事情(itemvalue,itemlabel等)。此代码返回所有数据,但以逗号分隔的所有值列表(id,name,password,date)。无论我尝试使用path,itemvalue等,它都不会只显示一个字段。理想情况下我想显示 - userName(userId) - 但在这个阶段我可能会选择userName!

从我对我的印象的影响并未连接用户是用户列表中的项目。如果我觉得我越来越接近它抱怨userId(etc)不是类型数组的方法(我假设它意味着它正在查看列表)或者它似乎已经理解了属性它没有数据(我猜测意味着它没有拿起名单!)。

任何人都可以帮忙!?

只是添加这是我认为最接近的但它抱怨用户不是用户的财产?

<form:form action="home" method="Post" modelAttribute="User" >
    <form:select path="User" >
        <form:options items="${userlist}" itemValue="userId"  itemLabel="userName" />

    </form:select>
    <input type="submit" id="submit" value="View"/>
 </form:form>

3 个答案:

答案 0 :(得分:0)

<form:form action="home" method="Post" modelAttribute="User" >
<form:select path="userId" >
    <form:options items="${userlist}" itemValue="userId"  itemLabel="userName" />
</form:select>
<input type="submit" id="submit" value="View"/>

此代码将在User对象中设置所选的userId,您在发布表单时将获得该对象。

路径变量应该绑定到支持对象属性,这里支持对象是User,因此你应该绑定它的userId属性。

答案 1 :(得分:0)

您可以尝试以下方式设置选项(假设userlistUser个对象的列表,并且包含字段userIduserName):

<c:forEach var="u" items="${userlist}">            
    <form:option item="${u}" itemValue="${u.userId}"  itemLabel="$(u.userName}" />
</c:forEach>

答案 2 :(得分:0)

非常感谢所有帮助。实际上虽然这非常有用但它也让我意识到我在错误的地方看了1-2天!当我从存储过程中直接从hibernate填充UserList时,它实际上并不是一个会话对象列表,而是一个逗号分隔值列表。道歉我没有发布这段代码(或直到现在再看一遍)。哎哟!