2012-04-03 1 views
0

Tim Tripcony의 제안에 따라 간단한 no xpage를 구현했습니다. 사용자가 "추가"버튼을 클릭 할 때 표시되는 필드 추가 버튼이 부분 새로 고침을 수행하고 아니요를 확장하면 데이터를 기억하지 못하는 부분 새로 고침 문제가 있습니다. 행 수부분 새로 고침 버튼 문제를 클릭하면 더 많은 필드가 XPage에 표시됩니다.

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" dojoForm="true"> 
    <xp:this.data> 
     <xp:dominoDocument var="newDoc" formName="frmAddMore"></xp:dominoDocument> 
    </xp:this.data> 
    <xp:this.afterPageLoad><![CDATA[#{javascript:viewScope.rowCount = new java.lang.Integer(5);}]]></xp:this.afterPageLoad> 
    <xp:div id="parentDiv"> 
     <xp:repeat indexVar="fieldSuffix" value="#{viewScope.rowCount}" 
      rows="#{viewScope.rowCount}" var="row"> 
      <xp:div> 
       <xp:inputText id="KeyNo"> 
        <xp:this.value><![CDATA[#{newDoc["KeyNo_#{fieldSuffix}"]}]]></xp:this.value> 
       </xp:inputText> 
       <xp:inputText id="Qty"> 
        <xp:this.value><![CDATA[#{newDoc["Quantity_#{fieldSuffix}"]}]]></xp:this.value> 
       </xp:inputText> 
      </xp:div> 
     </xp:repeat> 
     <xp:button value="Add More" id="btnAddMore" 
      execMode="partial"> 
      <xp:eventHandler event="onclick" submit="true" 
       execMode="partial" execId="parentDiv" refreshMode="partial" refreshId="parentDiv"> 
       <xp:this.action><![CDATA[#{javascript:viewScope.rowCount = new java.lang.Integer(viewScope.rowCount + 5);}]]></xp:this.action> 
       <xp:this.script> 
        <xp:executeClientScript 
         script="dojo.window.scrollIntoView(dojo.byId('#{id:btnAddMore}').id);"> 
        </xp:executeClientScript> 
       </xp:this.script> 
      </xp:eventHandler> 
     </xp:button> 
    </xp:div> 
</xp:view> 

무엇이 여기에 있습니까?

dojo.window.scrollIntoView 클라이언트 측 JS 함수가 작동하지 않는 것을 발견했습니다. 어떤 도움이라도 대단히 감사 할 것입니다.

답변

1

코드에서 문서에 데이터가 실제로 저장된 위치를 볼 수 없습니다. 따라서 행 데이터를 새로 고칠 때마다 필드를 반복하고 데이터를 검색합니다. 데이터가 저장되지 않았으므로 사용자가 입력 한 데이터가 손실됩니다.

partialrefresh에 간단한 작업을 저장하면 제대로 작동합니다. 유효성 검사를 비활성화하면 사용자가 일종의 저장 버튼을 클릭 할 때만 유효성 검사가 수행됩니다.

+0

감사합니다. 부분적 새로 고침이 기존 값을 잃지 않는다는 인상 아래에 있었습니까? 그래서 내가 언급 한대로 유효성 검사없이 각 부분 새로 고침 중에 강제로 저장해야합니다. – pipalia

+0

유효한 제품인지 다른 밸리데이션을 실행하는지 확인하기 위해 각 라인에서 유효성을 검사하려면 어떻게해야합니까? 입력 컨트롤의 ID를 실제로 계산할 수 없으므로 오류 메시지 컨트롤을 사용하면 어떻게됩니까? – pipalia

1

데이터를 보유하고있는 항목을 새로 고치지 않으면 부분 새로 고침으로 인해 데이터가 손실되지 않습니다. prtial 새로 고침과 full 사이의 유일한 차이점은 페이지의 영역 (이 예에서는 새로 고치는 "parentDiv")에 모든 컨트롤이 포함되어 있기 때문에 partial 만 발생한다는 것입니다. 따라서 parentDiv가 완전히 다시로드됩니다.

예를 들어, "Qty"가 새로 고침으로 인해 터치되기 때문에 "KeyNo"라는 inputText를 부분적으로 새로 고치면이 데이터는 손실되지만 "Qty"입력 텍스트는 그렇지 않습니다.

관련 문제