Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Spring MVC中填充下拉框_Java_Spring_Jsp_Spring Mvc_Drop Down Menu - Fatal编程技术网

Java 如何在Spring MVC中填充下拉框

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

我一直试图找出如何在SpringMVC中填充下拉框。在这个问题上有一些线索,但我发现没有一条对我有帮助,所以我希望这里有人能帮助我

这是我的控制器:

@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 on
documentService
字段

@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>