被这个问题困扰很久了,为什么对象的成员变量是一个对象,可以通过表当的形式给他注入值?

@Entity
@Table(name="zczb_qyyh")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class EntUser implements java.io.Serializable {

@ManyToOne(cascade={CascadeType.PERSIST,CascadeType.MERGE})
@JoinColumn(name="qyid")
private EntBaseInfo enterpriseBaseInfo;//企业ID

就是 enterpriseBaseInfo中的 qyid属性,我只能通过jsp表单
<input name="user.enterpriseBaseInfo.qyId" type="hidden" value="10”>
的形式转到action中给它注入值,
他为什么可以这样注入
enterpriseBaseInfo这个属性都没有实例化,如果不这么注入,我想通过
user.getEnterpriseBaseInfo().setQyid();是否可行
我不想在 user 中 enterpriseBaseInfo = new EnterpriseBaseInfo ()

互换的青春
浏览 392回答 2
2回答

慕容3067478

struts是通过java的反射机制进行表单注入的。也就是说,你把表单提交给一个Action的时候,他会检查你的action的属性,如果你的action里有一个属性为,private String userName;而你表单里有一个<input name="userName" type="hidden" value="10”>,这时候Action里有一个userName属性,表单也有一个名字为userName的属性,这时候struts就会自动把表单里的这个值赋给action的属性。这本质就是java的反射机制,如果你对这个机制不太了解的话可以去网上查一些资料。很多也很详细。这个机制用途很广,spring和hibernate也用到很多。你用user.getEnterpriseBaseInfo().setQyid()这个当然也可以,但是这就失去了struts的意义,这是struts提供的一个减少编程的渠道。

慕田峪4524236

struts数据绑定,只要在action里写上你想要传的数据和它相应的get跟set方法并在form里写明要传给哪个属性,struts就是自动把值传过去。
打开App,查看更多内容
随时随地看视频慕课网APP