Java 表单:选择返回逗号分隔列表

Java 表单:选择返回逗号分隔列表,java,jsp,spring-mvc,Java,Jsp,Spring Mvc,昨天早上,有人引导我走向春季MVC表单tld,从那以后,我一直在努力完成看起来非常简单的任务!这看起来是一个简单的解决方案,但我似乎无法正确地解决它。我在想,我一定是误解了一些非常基本的东西,以至于无法让它工作。我想知道是否有人能指出我错在哪里 目前,我所要做的只是在jsp选择中显示一个值列表。 模型实体非常简单(我意识到需要一些微调) 我的控制器目前也非常简单 @Controller @RequestMapping("/") public class HomeController exten

昨天早上,有人引导我走向春季MVC表单tld,从那以后,我一直在努力完成看起来非常简单的任务!这看起来是一个简单的解决方案,但我似乎无法正确地解决它。我在想,我一定是误解了一些非常基本的东西,以至于无法让它工作。我想知道是否有人能指出我错在哪里

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

我的控制器目前也非常简单

@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";
    }
@控制器
@请求映射(“/”)
公共类HomeController扩展JFrame{
@自动连线私人会议岛会议岛;
@RequestMapping(method=RequestMethod.GET)
公共字符串主页(模型){
List userlist=userDAO.ListAll();
model.addAttribute(“userlist”,userlist);
model.addAttribute(“User”,new User());
返回“家”;
}
我在堆栈溢出上使用了另一个q/a,我想知道这是否是我误解的根源。我一直在将值列表作为属性传递。我在这样做时遇到了很多错误,直到我意识到我还需要“传递”用户模型,以便jsp中的spring标记能够理解结构用户对象的ure。这意味着我现在传递2个属性-User,因为我理解它只是为了让表单理解结构(尽管如果我更聪明,这也会返回所选对象?)和userlist,这是实际的数据

在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、名称、密码、日期)列表。无论我如何处理path、itemvalue等,它都不会只显示一个字段。理想情况下,我希望显示-userName(userId)-但在这个阶段,我可能会满足于用户名

从我对未连接的印象来看,我认为用户是userlist中的一项。如果我觉得离它越来越近,它会抱怨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>


此代码将在用户对象中设置所选的用户ID,您将在发布表单时获得该用户ID


path变量应该绑定到backing object属性这里backing object是User,所以您应该绑定它的userId属性。

您可以尝试以下设置选项(假设
userlist
User
对象的列表,并且有字段
userId
userName
):



非常感谢所有这些帮助。事实上,尽管这非常有用,但它也让我意识到我已经在错误的地方找了1-2天了!因为我不是直接从hibernate从存储的进程填充用户列表,它毕竟不是会议对象的列表,而是逗号分隔的值的列表。抱歉,我没有这样做不要发布这段代码(或者直到现在再看)。哎哟!

对不起……但你到底在找什么?(我假设..您向模型添加了
userlist
属性..并且在检索它时..您在
userlist
中得到了以逗号分隔的元素值。但是您想将它们设置为select的选项吗?)是的,我想使用select列表中用户的元素。例如,而不是查看“userId1,Bob Hoskins,pwdcode,12/01/2015 00:00:00”(等)我至少会看到“Bob Hoskins”,理想情况下可以将其设置为“Bob Hoskins(UserId:userId1)“。我想我应该可以通过设置form:select path或form:options itemLabel属性来实现这一点?感谢您指定要添加哪个对象作为模型属性?我假设它是您在问题(代码)中指定的用户对象。当我这样做时,我得到错误“bean类的无效属性‘userId’”[[Ljava.lang.Object;]:”。这对我来说似乎有点奇怪,好像我把path=“User”放在上面,它至少意识到它应该查看一个用户对象,以及bean类[com.org.model.Meeting]的无效属性“User”的错误?(抱歉我分心了,编辑速度太慢了。)非常感谢所有这些帮助。事实上,虽然这非常有用,但它也让我意识到我已经在错误的地方找了1-2天了!因为我是从存储过程中填充用户列表的,而不是直接从hibernate填充的,它实际上不是会议对象的列表,而是逗号分隔的值的列表。抱歉,我没有发布此bit代码(或者现在再看一遍)。哎哟!你的意思是完全反向的形式外标签。这与我以前做的一样,但我希望让spring启动?!${u[1]}(ID:${u[0]})
<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>
<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"/>
<c:forEach var="u" items="${userlist}">            
    <form:option item="${u}" itemValue="${u.userId}"  itemLabel="$(u.userName}" />
</c:forEach>