2009-11-26 2 views
3

필자는 더 많은 시간을 쓰기 때문에보다 정확하게 작성하도록 내 질문을 편집했다.JSF, 폼의 다중 빈 업데이트 속성

나는 강아지의 서로 다른 특성의 값을 수정해야 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> 

이 내 관리 빈 User.java : (모든 getter와 setter이 같은 좋은 유효 빈 생성자가 비어 있음). 은 (처음에 개 속성은 검증 방법에 초기화, 그래서 값을 가지고있다 not null)

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

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

이것은 단지 사용자 클래스 Dog.java에 의해 사용되는 I 관리 설정하지 않은 다른 콩입니다 :

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

(...) 

오프 코스 이것은 간단한 것을 이해하는 간단한 예입니다.

양식을 보내면 User.name 속성이 업데이트되고 User.dog.name 속성은 업데이트되지 않습니다.

Java 클래스의 값은 어떻게 업데이트 될 수 있습니까? 형태 I은 현재 값을 표시 한 후 제출

User.name는 변경된 :

에서 System.out.println (User.name); // 폼이 제출 된 후 변경된 값 System.out.println (User.dog.name); // 값이 양식이 제출 된 후에 바뀌지 않았다

여기 내 문제를 이해한다면 잘 모르겠다. JSF 양식 내에서 Dog 클래스 속성을 조작하고 싶다. 직접 개 콩을 수정하지 않을 것이다. User.Dog ...

는 그런데, 얼굴-설정은 괜찮 :

편집 : 나는 내 사용자에 대한 관리 빈을 추가했습니다. 하지만 아무 것도 변경되지 않습니다 ...

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

질문 수정 - Dog 클래스 클래스는 사용자 – Bozho

+0

으로 신고되었습니다. 죄송합니다. 오타를 복사/붙여 넣으십시오. :) – wiooz

답변

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 실제로 관리 빈의 경우, 주입 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

0

이렇게하면됩니다. 디버거를 통해 코드를 실행하는 것이 좋습니다. 그러나 내 첫 번째 추측은 User.dognull입니다. 또한 대문자 콩 이름 User에 조금주의를 기울였습니다. user이어야합니다 (클래스 User의 정적 필드를 언급하지 않는 한 JSF 환경에서 끔찍한 실수가 될 수 있습니다).