簡體   English   中英

JSF,表單中的多bean更新屬性

[英]JSF, multiple bean update property in a form

由於我有更多時間來編寫,因此我將問題編輯得更精確。

我有一個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構造函數為空)。 (最初Dog屬性在驗證方法中初始化,因此它具有值not null

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

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

這是我沒有設置托管的其他bean,因為它僅由User類Dog.java

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

(...)

當然,這是一個理解事物的簡單例子。

當我發送表單時, 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 ...

順便說一句,faces-config是可以的:

編輯:我為我的用戶管理的bean添加了一個。 雖然,沒有任何改變......

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

您需要在構建或初始化父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,則通過faces-config.xml將其作為托管屬性注入User

<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命名約定命名的

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM