2012-02-18 2 views
0

두 오브젝트 A와 B 사이의 관계를 관리하는 selectOneMenu가 있습니다. 여기서 A는 고정되어 있으며 B는 메뉴를 통해 선택할 수 있습니다.
양식 제출시 B는 추가 처리 (관계 오브젝트 AToB 작성 W 저장)를 위해 bean으로 송신됩니다.jsf 직접 요청 관리 bean으로 selectOneMenu 값을 전송하십시오.

실용적이지 않습니다!

<h:selectOneMenu value=#{b}> 
    <!-- b items from bean --> 
</h:selectOneMenu> 
<h:commandButton action="#{bean.addBToSelA(b)}"/> 

<managed-bean> 
    <description>B Entity Request Bean</description> 
    <managed-bean-name>b</managed-bean-name> 
    <managed-bean-class>B</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
</managed-bean> 

사례!

그러나 selectOneMenu 값이 다른 관리 빈의 중첩 된 특성 인 경우 작동합니다. (예를 들어 ATOB 등)

<h:selectOneMenu value=#{aToB.b}> 
    <!-- b items from bean --> 
</h:selectOneMenu> 
<h:commandButton action="#{bean.addBToSelA(aToB.b)}"/> 

<managed-bean> 
    <description>AToB Entity Request Bean</description> 
    <managed-bean-name>aToB</managed-bean-name> 
    <managed-bean-class>AToB</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
</managed-bean> 

참고 : 내 "b는"다른 요청의 단지 재산 관리 Bean 경우 그것은 충분하다.

누군가가 친절하고 이유를 설명 할 수 있습니까?

답변

1

JSF가 사전에 Bean 인스턴스를 이미 작성했기 때문에. 인스턴스가 이미 범위에있는 경우 모델 값으로 대체되지 않습니다. faces-config.xml에서 <managed-bean>을 삭제하면 정상적으로 작동합니다.

구체적인 문제에

관련없는 , 당신은 이미 JSF 2.x 또는 3.0을 사용하는 것 왜 이전 JSF 1.x 스타일 faces-config.xml 구성을 고수하고 있습니까? 단지 @ManagedBean 어노테이션을 사용하십시오 (실제 백킹 빈 클래스에만 해당).

+0

답장을 보내 주셔서 감사 드리며 나중에 테스트 해 드리겠습니다. 그러한 요청 - 범위 엔티티는 어떤 주석도 전혀 사용하지 않고 Hibernate로부터의 Pojo이다. 그것들은 EAR로부터 검색되고 클라이언트들간에 공유됩니다 (장래에 제공 될 것입니다). 내 생각은 필요하다면 각 클라이언트마다 독립적으로 유지할 수있는 방법입니다. 어노테이션이 애플리케이션/프로젝트와 관련이 있고 확실히 재사용되지 않는다면, 소스 코드에 주석을 삽입해도 상관 없습니다. 그러나 여전히 각각에는 찬반 양론이 있습니다. – djmj

+0

사용자 입력 속성이있는 새 B 객체를 추가 할 수있는 다른 양식이 있기 때문에 삭제할 수 없습니다. 그래서 이름을 바꾸어야합니다. – djmj

관련 문제