Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.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 弹簧形式未加载选择正确的数据_Java_Spring_Spring Mvc - Fatal编程技术网

Java 弹簧形式未加载选择正确的数据

Java 弹簧形式未加载选择正确的数据,java,spring,spring-mvc,Java,Spring,Spring Mvc,使用Spring3.1。我有一个表单,用于填充存储在DB中的POJO。但是,此POJO中还有另一个POJO的实例: class Job { private id; private Filter filter; //getters and setters } 和过滤器类: class Filter { private id; private name; //getters and setters } 因此,在填充作业对象的表单上,我尝试在选择对象

使用Spring3.1。我有一个表单,用于填充存储在DB中的POJO。但是,此POJO中还有另一个POJO的实例:

class Job {
    private id;
    private Filter filter;
    //getters and setters
}
和过滤器类:

class Filter {
    private id;
    private name;
    //getters and setters
}
因此,在填充作业对象的表单上,我尝试在选择对象中显示过滤器对象。所有这部分似乎都正常工作。当我试图编辑一个已经有过滤器的作业对象时,问题就出现了。选择对象不会自动将自身设置为与作业关联的相应筛选器对象。想知道是否有人能让我知道我搞砸了什么。以下是JSP:

<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s"%>

<div align="center">
<s:url value="/job" var="jobPost_url"/>
<s:url value="/job/provData" var="provData_url"/>

<sf:form method="POST" modelAttribute="job" dojoType="dijit.form.Form" action="${jobPost_url}">
    <script type="dojo/method" event="onSubmit">
        if (!this.validate()) {
            return false;
        }
        return true;
    </script>
    <sf:hidden path="id" />
    <table>
        <tr><td align="right">Customer:</td><td>
            <sf:input path="customer" dojoType="dijit.form.ValidationTextBox" trim="true" required="true"/><br/>
            <sf:errors path="customer" cssClass="error"/>   
        </td></tr>
        <tr><td align="right">Project:</td><td>
            <sf:input path="project" dojoType="dijit.form.ValidationTextBox" trim="true" required="true"/><br/>
            <sf:errors path="project" cssClass="error"/>    
        </td></tr>
        <tr><td align="right">Date:</td><td>
            <sf:input path="date" dojoType="dijit.form.DateTextBox" required="true"
                    constraints="{datePattern:'MMM d, y'}" /><br/>
            <sf:errors path="date" cssClass="error"/>   
        </td></tr>
        <tr><td align="right">Filter:</td><td><sf:select id="filter" path="filter" items="${filters}" itemValue="id" 
            itemLabel="programName"/></td>
        </tr>
        <tr><td colspan="2" align="right">
            <button dojoType="dijit.form.Button" type="submit">Submit</button>
            <button dojoType="dijit.form.Button" id="testButton">Test</button>
        </td></tr>
    </table>
</sf:form>
</div>

所以,正如我所说的,在创造一份新工作时,一切都很顺利。条款列表被加载到select中,所有内容都被正确分配并正确存储在DB中。但是,当用户稍后选择并编辑某个设置时,它会将它们带到同一个表单,并正确加载除“设置选择”之外的所有数据。它在中加载规定列表,但未选择正确的规定。有没有办法解决这个问题?谢谢。

请为jsp页面尝试此代码

<form:select path="">
  <c:forEach items="" var="">
     <option value=""><c:out value="" /></option>
  </c:forEach>  
</form:select>


这应该适合您。

结果表明问题在于我没有覆盖对象的Equals和Hashcode。在解决了另一个问题后,我遇到了这个问题,解决了它,一切都开始正常工作。这变得特别容易,因为我使用Eclipse,并且它可以自动生成覆盖这两种方法的代码。

虽然这是从列表对象填充选择框的另一种方法,但实际上并没有解决我的问题。选择框不会根据加载到表单中的对象自动设置为正确的选项。另外,我在jsp中使用的解决方案更干净,所以我不确定为什么我会使用您的解决方案,除非它确实解决了我遇到的问题。谢谢你。
public class ProvisionEditor extends PropertyEditorSupport {

private ProvisionService provisionService;

public ProvisionEditor(ProvisionService provisionService) {
    this.provisionService = provisionService;
}

public void setAsText(String value) {
    long provisionId = Long.parseLong(value);
    Provision p = provisionService.getById(provisionId);
    setValue(p);
}
}
<form:select path="">
  <c:forEach items="" var="">
     <option value=""><c:out value="" /></option>
  </c:forEach>  
</form:select>