2015-09-03 73 views
1

我刚刚开始学习Spring/MVC。我有一个基本的模型/控制器/ JSP工作。一种形式的多个变量:select

我与它的几个表单项表 - 第一行是这样的:

<div id="general"> 
<table> 
<tr> 
    <td><form:select path="systemType" items="${systemTypes}" /></td> 
</tr> 

这工作正常 - 选择框使用对systemType一套方法豆将用户输入。

那么,如果我说了User。他们在模型bean中有名字/姓氏。强迫某人使用两个选择框来选择他们的名字和姓氏是毫无意义的。

<tr> 
    <td> 
    <form:select path="User" items="${users.firstName} ${users.lastName}" /> 
    </td> 
</tr> 

所以我用jstl来显示“名字+姓氏”。但是,采取这种输入并将其放回到我的模型bean中,第一个和最后一个是分开的最好方法是什么?我应该只更改模型bean以显示一个完整的名称,还是可以在控制器中进行某种后处理?

+0

如果你有两个同名的用户,第一个和最后一个会发生什么?你如何区分它们? – RealSkeptic

+0

所以,你想在一个框中得到名字和姓氏。只需把它放在一个地方,在服务层分割空间名称并以不同的方式保存。那有什么问题?谁的姓和名都是相同的。我不认识这样的人,是因为我花时间在SO上回答用户还是没有人这样? –

+0

@WeareBorg。有一些'reduplicants'。如果您也花时间在[wikipedia](https://en.wikipedia.org/wiki/List_of_people_with_reduplicated_names)和[stackexchange](http://english.stackexchange.com/questions/94163/what-是一个人的名字,与同样的第一个和最后一个名字) –

回答

0

A WebDataBinder是在Spring/MVC中对查看器和控制器之间的数据进行重新格式化/处理的好方法。也是一个例子here

但是你可以简单地使用了一个二传手(简单的例子,没有错误处理):

class Name { 
    private String first; 
    private String last; 

    void setFullName(String fullName) { 
     String[] parts = fullName.split(" "); 
     first = parts[0]; 
     last = parts[1]; 
    } 
} 

并在视图是这样的:

<form:select path="User" items="${fullName}" />

Spring将调用函数名为setFullName,当它运行一个名为fullName的变量时。班级的内部结构取决于你。

+0

好吧,这是我正在寻找的。感谢您的建议。我现在将实现setFullName版本,但会尝试执行WebDataBinder以便将来了解它。 –