2012-10-15 69 views
0

我使用Spring 3.1.1.RELEASE。我有這個命令對象...如何在命令對象中填充對象?

@Entity 
public class Contract { 

    @Id 
     @Column(name = "ID") 
     @GeneratedValue(strategy=GenerationType.AUTO) 
     private Integer id; 

     @OneToOne(fetch = FetchType.EAGER, targetEntity = Product.class) 
     @JoinColumn(name = "PRODUCT_ID") 
     @NotNull 
     private Product product; 

     @Column(name = "ORDER_ID") 
     @NotNull 
     private String orderId;  
    … 

我想在我的JSP表單上有一個下拉列表的產品代表產品領域。一旦用戶選擇並提交表單,它將通過命令對象的setProduct方法填充對象的「產品」成員字段。我知道如何設置的字符串字段,

<form:input path="orderId" /> 

但什麼,我需要把我的控制器和JSP,這樣,當我的請求被提交給控制器...

@RequestMapping(value = "/add", method = RequestMethod.POST) 
public ModelAndView addContract(final Contract contract, 
           final BindingResult result) { 
… 

產品領域將正確填充?

回答

0

答案涉及到不僅僅是JSP選擇標籤。它也需要粘合劑。如果我有這個類

@Component 
public class ProductEditor extends PropertyEditorSupport 
{ 

    @Autowired 
    private ProductService m_productSvc; 

    @Override 
    public String getAsText() 
    { 
     final Product product = (Product) getValue(); 
     final String text = (product != null ? product.getProductId() : ""); 
     return text; 
    } 

    @Override 
    public void setAsText(final String id) 
    { 
     final Product product = m_productSvc.findById(id); 
     setValue(product); 
    } 
} 

我可以在我的控制寄存器粘結劑...

@InitBinder 
    public void initBinder(WebDataBinder binder) { 
     … 
     binder.registerCustomEditor(Product.class, this.m_productEditor); 
    } 
在我的JSP

然後,我可以有

   <form:select path="product"> 
        <form:option value="" label="Select" /> 
        <form:options items="${productList}" itemValue="id" itemLabel="name" /> 
       </form:select> 

,我的選擇將被綁定到我的命令對象的「產品」字段。

0

嘗試使用標籤<form:select/>

<form:select path="name_attribute" items="${myobjs}" itemLabel="name" itemValue"number"/> 

的項目屬性採用對象的集合。因此,對於這個例子想象myObjs是下面的類的集合:

public class MyObj{ 
    private String name; 
    private String number; 
} 

參考:http://static.springsource.org/spring/docs/2.0.x/reference/spring-form.tld.html#spring-form.tld.select

參考2:http://static.springsource.org/spring/docs/current/spring-framework-reference/html/view.html(參見第17.2.4.9選擇標記)