0

Spring3.1.1.RELEASEを使用しています。このコマンドオブジェクトがあります…</p>

@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フォームに必要なのは、製品のドロップダウンリストに製品フィールドを表示させることです。ユーザーが1つを選択してフォームを送信すると、コマンドオブジェクトのsetProductメソッドを介してオブジェクトの「product」メンバーフィールドに入力されます。文字列フィールドの設定方法を知っています。

<form:input path="orderId" />

しかし、リクエストがコントローラーに送信されたときに…</ p>になるように、コントローラーとJSPに何を入れる必要がありますか。

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

製品フィールドは正しく入力されますか?

4

2 に答える 2

0

タグを使ってみる<form:select/>

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

items 属性は、オブジェクトのコレクションを取ります。したがって、この例では、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 選択タグを参照)

于 2012-10-15T15:56:36.860 に答える
0

その答えは、JSP select タグだけではありません。バインダーも必要でした。このクラスがあれば

@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);
    }
}

コントローラーにバインダーを登録できます…</p>

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

私の選択は、私のコマンドオブジェクトの「製品」フィールドにバインドされます。

于 2012-11-07T01:08:22.593 に答える