Java 如何在Spring MVC中填充下拉框
我一直试图找出如何在SpringMVC中填充下拉框。在这个问题上有一些线索,但我发现没有一条对我有帮助,所以我希望这里有人能帮助我 这是我的控制器:Java 如何在Spring MVC中填充下拉框,java,spring,jsp,spring-mvc,drop-down-menu,Java,Spring,Jsp,Spring Mvc,Drop Down Menu,我一直试图找出如何在SpringMVC中填充下拉框。在这个问题上有一些线索,但我发现没有一条对我有帮助,所以我希望这里有人能帮助我 这是我的控制器: @Controller @RequestMapping("/document-revision") public class DocumentRevisionController { @Autowired private DocumentRevisionService documentRevisionService; private Docu
@Controller
@RequestMapping("/document-revision")
public class DocumentRevisionController {
@Autowired
private DocumentRevisionService documentRevisionService;
private DocumentService documentService;
@RequestMapping(value="/list", method=RequestMethod.GET)
public String getDocumentRevisionList(Model model) {
List<DocumentRevision> documentRevisions = documentRevisionService.retrieveAllDocumentRevisions();
model.addAttribute("documentRevisions", documentRevisions);
return "document-revision";
}
@RequestMapping(value="/add", method=RequestMethod.GET)
public String getDocumentRevision(Model model) {
DocumentRevision documentRevision = new DocumentRevision();
model.addAttribute("documentRevisionAttribute", documentRevision);
return "new-documnent-revision";
}
@RequestMapping(value="/add", method=RequestMethod.POST)
public String postDocumentRevision(@ModelAttribute("documentRevisionAttribute") @Valid DocumentRevision documentRevision, BindingResult result) {
if(result.hasErrors()){
return "new-document-revision";
}
documentRevisionService.createDocumentRevision(documentRevision);
return "redirect:/testapp/document-revision/list";
}
}
解决方案我想我应该添加完整的控制器代码,以防其他人从中受益:
@Controller
@RequestMapping("/document-revision")
public class DocumentRevisionController {
@Autowired
private DocumentRevisionService documentRevisionService;
@Autowired
private DocumentService documentService;
@RequestMapping(value="/list", method=RequestMethod.GET)
public String getDocumentRevisionList(Model model) {
List<DocumentRevision> documentRevisions = documentRevisionService.retrieveAllDocumentRevisions();
model.addAttribute("documentRevisions", documentRevisions);
return "document-revision";
}
@RequestMapping(value="/add", method=RequestMethod.GET)
public String getDocumentRevision(Model model) {
DocumentRevision documentRevision = new DocumentRevision();
model.addAttribute("documentRevisionAttribute", documentRevision);
model.addAttribute("documentNumberList", documentService.retrieveAllDocumentNumbers());
return "new-documnent-revision";
}
@RequestMapping(value="/add", method=RequestMethod.POST)
public String postDocumentRevision(@ModelAttribute("documentRevisionAttribute") @Valid DocumentRevision documentRevision, BindingResult result) {
if(result.hasErrors()){
return "new-document-revision";
}
documentRevisionService.createDocumentRevision(documentRevision);
return "redirect:/testapp/document-revision/list";
}
}
@控制器
@请求映射(“/文档修订”)
公共类DocumentRevisionController{
@自动连线
私人文档修订服务文档修订服务;
@自动连线
私人文件服务;
@RequestMapping(value=“/list”,method=RequestMethod.GET)
公共字符串getDocumentRevisionList(模型){
List documentRevisions=documentRevisionService.retrieveAllDocumentRevisions();
model.addAttribute(“documentRevisions”,documentRevisions);
返回“文件修订”;
}
@RequestMapping(value=“/add”,method=RequestMethod.GET)
公共字符串getDocumentRevision(模型){
DocumentRevision DocumentRevision=新文档修订();
model.addAttribute(“documentRevisionAttribute”,documentRevision);
model.addAttribute(“documentNumberList”,documentService.retrieveAllDocumentNumbers());
返回“新文档修订”;
}
@RequestMapping(value=“/add”,method=RequestMethod.POST)
公共字符串postDocumentRevision(@ModelAttribute(“documentRevisionAttribute”)@Valid DocumentRevision DocumentRevision,BindingResult){
if(result.hasErrors()){
返回“新文件修订”;
}
documentRevisionService.createDocumentRevision(documentRevision);
返回“重定向:/testapp/文档修订/列表”;
}
}
不确定使用documentNumberList
调用什么控制器方法来显示您的视图,但您需要将该集合添加到传递到此视图的模型中:
model.addAttribute("documentNumberList", documentService.retrieveAllDocumentNumbers());
尽管从异常堆栈跟踪中,您也遗漏了一个@Autowired ondocumentService
字段
@ModelAttribute("numberList")
public List<Document> documentNumberList(){
List<LabelValue> selectItems = new ArrayList<LabelValue>();
List<Document> docList = documentService.retrieveAllDocumentNumbers();
for (Document doc : docList) {
selectItems.add(new LabelValue(doc.id,doc.value));
}
return selectItems;
}
----JSP-----
文件编号
希望这有帮助。我今天自己解决了这类问题。这是非常简单和容易理解的。 在SpringMVC3.0控制器中,只需放置以下代码-
@ModelAttribute("creditCardTypes")
public Map<String,String> populateCreditCardTypes() {
Map<String,String> creditCardTypes = new LinkedHashMap<String,String>();
creditCardTypes.put("VS", "Visa");creditCardTypes.put("MC", "MasterCard");
creditCardTypes.put("AE", "American Express");
creditCardTypes.put("DS", "Discover");creditCardTypes.put("DC", "Diner's Club");
return creditCardTypes;
}
@ModelAttribute(“信用卡类型”)
公共地图populateCreditCardTypes(){
Map creditCardTypes=新建LinkedHashMap();
creditCardTypes.put(“VS”、“Visa”);creditCardTypes.put(“MC”、“万事达卡”);
creditCardTypes.put(“AE”、“美国运通”);
creditCardTypes.put(“DS”、“Discover”);creditCardTypes.put(“DC”、“就餐俱乐部”);
返回信用卡类型;
}
现在,“creditCardTypes”属性将在页面加载或页面提交范围中可用,这意味着无论requestmapping url是什么,它都将可用
在jsp中,将此代码放在-信用卡类型中:
<form:select path="creditCardType">
<option value="Select" label="Select a card type"></option>
<form:options items="${creditCardTypes}" />
</form:select>
这里,path=“creditCardType”表示Spring MVC模型/命令对象中的属性,
items=“${creditCardTypes}”表示所有填充的信用卡类型将在“creditCardTypes”ModelAttribute中可用。
就这样 我更喜欢这个解决方案,因为您可能并不总是拥有/需要一个模型作为RequestHandler方法的参数+这是我的荣幸。
@ModelAttribute("numberList")
public List<Document> documentNumberList(){
List<LabelValue> selectItems = new ArrayList<LabelValue>();
List<Document> docList = documentService.retrieveAllDocumentNumbers();
for (Document doc : docList) {
selectItems.add(new LabelValue(doc.id,doc.value));
}
return selectItems;
}
private String lable;
private String value;
//getters/setters
<tr>
<td>DocumentNumber</td>
<td><form:select id="docNo" path="document_number">
<form:option value="NONE" label="--- Select ---" />
<form:options items="${numberList}" itemValue="value" itemLabel="lable"/>
</form:select>
</td>
<td><form:errors path="document_number" cssClass="error" /></td>
</tr>
@ModelAttribute("creditCardTypes")
public Map<String,String> populateCreditCardTypes() {
Map<String,String> creditCardTypes = new LinkedHashMap<String,String>();
creditCardTypes.put("VS", "Visa");creditCardTypes.put("MC", "MasterCard");
creditCardTypes.put("AE", "American Express");
creditCardTypes.put("DS", "Discover");creditCardTypes.put("DC", "Diner's Club");
return creditCardTypes;
}
<form:select path="creditCardType">
<option value="Select" label="Select a card type"></option>
<form:options items="${creditCardTypes}" />
</form:select>