2009-11-26 89 views
3

我編輯我的問題更精確,因爲我有更多時間來編寫它。JSF,表單中的多個bean更新屬性

我有一個JSF形式應該修改狗的不同屬性的值:

<h:form id="submit"> 
    <h:outputLabel value="Dog name:"/> 
    <h:inputText value="#{User.dog.name}" id="dogName"/> 
    <h:outputLabel value="Name :"/> 
    <h:inputSecret value="#{User.name}" id="name" /> 
    <h:commandButton type="submit" value="Submit" /> 
</h:form> 

這是我管理的bean User.java: (所有getter和setter是好的,有效的,因爲這是一個bean構造函數是空的)。 (最初狗特性是在驗證方法初始化,因此它有一個值,並且是not null

public class User { 
    public User() {} 
    String name; 
    Dog dog; 

    (...get, set, ect...) 

這是我,因爲它僅由用戶類 Dog.java尚未設置管理的其他的bean:

public class Dog{ 
    public User() {} 
    String dog_name; 

(...) 

Offcourse這是一個理解事情的簡單例子。

當我發送表格時,User.name屬性會更新但不是User.dog.name屬性。

如何更新兩個java類的值?

提交表單後,我顯示當前值,僅User.name已經改變:

的System.out.println(User.name); //提交表單後值改變 System.out.println(User.dog.name); //值提交表單後沒有改變

我不知道你是否明白我的問題在這裏,我想操縱我的JSF表單中的Dog類屬性,但我不會直接修改Dog bean,只有User.Dog ......

順便說一句,面臨-配置是確定的:

編輯: 我加了我的用戶管理的Bean。雖然沒有什麼改變...

<managed-property> 
    <property-name>dog</property-name> 
    <property-class>package.Dog</property-class> 
    <value>#{Dog}</value> 
</managed-property> 
+0

更正您的問題 - 您的Dog班級宣佈爲用戶 – Bozho 2009-11-26 19:43:21

+0

對不起,複製/粘貼錯字。 :) – wiooz 2009-11-27 04:33:54

回答

2

您需要在構建或初始化父Bean期間預先實例化嵌套的Bean。 JSF不會爲你做到這一點。

所以不是:

public class User { 
    Dog dog; 
} 

你需要直接實例吧:

public class User { 
    Dog dog = new Dog(); 
} 

或在構造函數:

public class User { 
    Dog dog; 
    public User() { 
     this.dog = new Dog(); 
    } 
} 

,或者如果Dog實際上是一個管理的bean,注入它作爲User的託管財產由faces-config.xml

<managed-bean> 
    <managed-bean-name>dog</managed-bean-name> 
    <managed-bean-class>mypackage.Dog</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
</managed-bean> 

<managed-bean> 
    <managed-bean-name>user</managed-bean-name> 
    <managed-bean-class>mypackage.User</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
    <managed-property> 
     <property-name>dog</property-name> 
     <value>#{dog}</value> 
    </managed-property> 
</managed-bean> 

在這一切的我假設你的屬性和getter和setter提供了根據Javabean naming conventions命名。

+0

謝謝,我會盡快回家。當你必須完成一個完整的項目而沒有任何有用的知識時,會發生這種情況,我終止了學校,但老師只告訴我們關於簡單的JSP。當我們引用一個大而完整的應用程序時,沒有什麼能夠簡單地在JSP中完成。謝謝,當我到家後,我確認了這個解決方案;)! (我不知道標籤,這就是我們所說的:同一周學習Hibernate,JSF,JSTL和Ajax,現在相當不錯;) – wiooz 2009-11-26 23:37:45

0

這應該工作。我建議通過調試器運行代碼,但我的第一個猜測是User.dognull。另外,我對大寫bean名稱User有點警惕。這應該是user(除非您指的是類User中的靜態字段,這在JSF環境中將是一個可怕的錯誤)。