2011-02-13 4 views
1

[春3.0.5] [JBossの5.1]Spring MVCに問題があります。 2つ以上のオブジェクトからビューを作成するにはどうすればよいですか?

Aコントローラには2クラス

public class User { 
private String name; 
private String surname; 
private Address address; 
... 
sets and gets 
setters and getters 
} 

public class Address { 
private String street; 

... 
setters and getters 
} 

を持って、私はこのコードを持っている:

@Controller 
public class MyController { 

@RequestMapping(value = "/index") 
public ModelAndView showForm() { 
ModelAndView mav = new ModelAndView(); 
mav.setViewName("index"); 
User user = new User(); 
Address adr = new Address(); 
mav.addObject("user", user); 
mav.addObject("adr", adr); 
} 

をそして今、私はから作成したいですJSPで2つの入力要素を持つもの

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

    <html><head><body> 
    <form:form method="POST" commandName="user"> 
    <form:label path="name" /> 
    <form:input path="name" /> 
    <form:label path="adr.street" /> 
    <form:input path="adr.street" /> 
    </form:form> 
    </body> 
    </html> 

I rこのような例外が発生しました:

org.springframework.beans.NotReadablePropertyException:Beanクラスの「adr」プロパティが無効です。[form.User]:Beanプロパティ 'adr'が読み込めないか、無効なゲッターメソッドがあります。ゲッタの戻り値の型は、セッタのパラメータ型と一致しますか?なぜ、どのようにコードを改善するために org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:707) org.springframework.be

は、誰かが私に説明していただけますか?

+0

はあなたがコンパイルエラーを得ることはありませんか? showFormメソッドで 'ModelAndView'オブジェクトを返していません。 – gigadot

+0

申し訳ありませんが、返品mav; – user6778654

+0

"セッターとゲッター"だけでなく、実際のゲッターとセッターを見る必要があります。 – skaffman

答えて

3

オブジェクトをラッパーフォームクラスでラップし、モデルに渡します。お使いのモデルで

public class MyForm 
{ 
    public user; 
    public address; 
    // getters, setters, etc. 
} 

その後

ModelAndView mav = new ModelAndView(); // ModelAndView 
mav.addObject("myForm", new MyForm()); // e.g. 

、ユーザーに取り付けて取り組むべき?言い換えれば、UserAddressと1対多の関係があり、データアクセス層がこれらの懸案事項を処理できるようにしてください。

@Entity 
@Table(name = "user") 
public class User 
{ 
    @Id @Column(name="user_id") 
    public Long id; 

    @OneToMany 
    @JoinColumn(name = "user_id") // so the address table would have a user_id foreign key 
    public Address address; 
} 
+0

ユーザーと住所の関係が1:Nの場合、どのように応答を使用できますか? – user6778654

+0

http://stackoverflow.com/questions/24119973/form-creation-in-spring-mvc-issueこの問題も解決してください –

0

対象ユーザーのプロパティは、アドレスであるあなたがADRの代わりにアドレスを使用する必要がある形でので、(私はあなたがのgetAddress()と呼ばれるゲッターを持っていると仮定):

<form:label path="address.street" /> 
<form:input path="address.street" /> 

またはと呼ばれるゲッターを作成getAdr()(希望どおり)

2

また、表示のために新しいクラスを厳密に導入できない場合は、次のようにすることもできます。 Springフォームはネストされたプロパティを処理できます。

あなたはアドレスオブジェクトをこのように達するだろうと、あなたが.jspで
User user = new User(); 
Address adr = new Address(); 
user.setAddress(adr); 
mav.addObject("user", user); 

<form:form method="POST" commandName="user"> 
<form:label path="name" /> 
<form:input path="name" /> 
<form:label path="address.street" /> 
<form:input path="address.street" /> 
</form:form> 
+0

' '。それは私に大きな時間を助けました! – Solata

関連する問題