2012-07-05 2 views
1

저장 버튼을 클릭하면 'addCompany'작업이 호출되지만 디버깅 할 때 내 백킹 빈에서 인스턴스 변수 companyName의 값을 볼 때 null이 표시됩니다. 나는 진짜 바보 같은 실수를하고 있다고 생각한다.h : rich 내부의 inputText 값 : backing bean에 바인딩되지 않은 modalPanel

모달 XHTML : 다른 xhtml의 양식 태그에 포함됩니다. 콩 (심 구성 요소) 백업

<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
        xmlns:ui="http://java.sun.com/jsf/facelets" 
        xmlns:h="http://java.sun.com/jsf/html" 
        xmlns:a4j="http://richfaces.org/a4j" 
        xmlns:rich="http://richfaces.org/rich" 
        xmlns:f="http://java.sun.com/jsf/core"> 

     <rich:modalPanel id="AddDmpCompanyModalId" 
          showWhenRendered="#{companyAdminAction.showAddCompanyModal}" 
          width="500" 
          height="340" 
          autosized="true"> 

       <f:facet name="header"> 
        <h:outputText value="Add Company"/> 
       </f:facet> 


       <a4j:outputPanel id="addDmpCompanyInputPanel"> 

          <label style="font-weight:bold;margin-top:5px">Name: </label> 
          <h:inputText id="companyName" value="#{companyAdminAction.companyName}"/> 

           <a4j:commandLink id="submit-add-company-name-link" 
               immediate="true" 
               action="#{companyAdminAction.addCompany()}" 
               styleClass="button" 
               reRender="AddDmpCompanyModalId,addDmpCompanyInputPanel" 
               limitToList="true"> 
            <span class="inner-button">Save</span> 
           </a4j:commandLink> 


       </a4j:outputPanel> 

      </rich:modalPanel> 

    </ui:composition> 

Name("companyAdminAction") 
@Scope(ScopeType.CONVERSATION) 
public class CompanyAdmin { 

    private String companyName;  

    public String getCompanyName() { 
     return companyName; 
    } 

    public void setCompanyName(String companyName) { 
     this.companyName = companyName; 
    } 

     public void addCompany() { 
    // On click of save debugger comes here, but shows the value of   
     //companyName as null 
    } 

} 
+0

JSF 및 RF 버전이란 무엇입니까? – kosa

+0

JSF : 1.2, RF : 3.3.1 –

답변

0

예, 이유는 매우 간단합니다. 이 옵션은 JSF가 addCompany() 함수 BEFORE 값을 변환하고 모델을 호출하도록합니다.

해결책은 똑같이 간단합니다. immediate=true 속성을 <a4j:commandLink/>에서 제거하십시오.

+0

실제로 이것은 문제의 일부 였고, 부자 : 모달 속성 domElementAttachment = "parent"를 추가해야했습니다. 온라인에서 읽었지만 여전히 혼란 스럽습니다. 어쨌든 작동했습니다. 여기에서이 속성에 대해 자세히 설명해 주면 좋을 것입니다. 나는 간단한 설명으로 당신의 대답을 좋아합니다. 고맙습니다! :). –

+0

'domElementAttachment'는 richfaces에게''(popup)의 html 위치를 알려줍니다. 보통 팝업은'' 태그의 자식으로 배치됩니다. 그렇지 않으면 다른 요소와 겹쳐 질 수 있기 때문입니다. 귀하의 경우 팝업에는 입력 요소가 있지만 '

' 태그는 포함되어 있지 않으므로 ** 외부 ** 요소를 양식으로 렌더링하므로 작동하지 않습니다. – EmirCalabuch

0

아마 복합 구성 요소는 형태로 내부, 그리고 형태로 당신은 당신의 bean의 companyName 속성에 바인딩 된 다른 구성 요소를 가지고있다. rich:modalPanel에 대한 양식을 추가하고 포함 된 실제 양식 외부로 이동하십시오. 귀하의 코드는 다음과 같아야합니다

<rich:modalPanel id="AddDmpCompanyModalId" ... > 
    <f:facet name="header"> 
     <h:outputText value="Add Company"/> 
    </f:facet> 
    <h:form> 
     <a4j:outputPanel id="addDmpCompanyInputPanel"> 
      ... 
     </a4j:outputPanel> 
    </h:form> 
</rich:modalPanel> 

상세 정보 : 당신이 당신의 <a4j:commandLink/>immediate=true을 사용하고 있습니다 :