필드에 반복 컨트롤이 있습니다. 지금은 onChange
이벤트에서 viewScope
을 사용하여 반복 컨트롤 내부에서 필드 값을 캡처합니다. 범위 변수에 설정된 값을 얻으려면 필드가 부분적으로 새로 고쳐 져야합니다.반복 컨트롤에서 값 가져 오기
여기에서 문제는 사용자가 포커스를 반복 컨트롤 밖으로 설정하면 필드의 부분 새로 고침이 완료 될 때까지 포커스가 설정되지 않는다는 것입니다. 때로는 사용자가 원격 도미노 서버에 액세스 할 때이 부분 새로 고침이 너무 느립니다. 양식을 제출할 때 반복 제어 내부의 값을 캡처하는 효과적인 방법이 있습니까?
아이디어는 추가 버튼을 클릭 할 때 동적으로 필드를 만드는 것입니다. 문제는 반복 컨트롤 내부의 필드에서 반복 컨트롤 외부의 필드로 포커스를 이동할 때 발생합니다. 반복 컨트롤 내부의 부분 새로 고침이 완료 될 때까지 포커스가 설정되지 않습니다. 서버가 시스템에서 로컬로 실행중인 경우에는이 시나리오가 수행되지 않을 수 있습니다. 아래의 코드는 반복 컨트롤의 사용은 입력 변수 번호와 반복 제어를위한 동적
<xp:button value="Add Objects" id="addNavObj">
<xp:eventHandler event="onclick" submit="true"
refreshId="objLine" refreshMode="partial" id="eventHandler24">
<xp:this.action><![CDATA[#{javascript:viewScope.rowItems=viewScope.rowItems+1;getComponent("navObjRep").setValue(parseInt(viewScope.rowItems));}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
<xp:repeat rows="30" var="rowData" indexVar="rowIndex"
repeatControls="false" first="0" value="#{javascript:viewScope.rowItems}"
id="navObjRep" style="width:800.0px">
<xp:panel style="width:800.0px" id="objLine">
<xp:table style="width:800.0px">
<xp:tr>
<xp:td style="width:245.0px">
<xp:inputText id="objType" style="width:130.0px">
<xp:typeAhead mode="full" minChars="1" ignoreCase="true"
id="typeAhead4" rendered="false">
</xp:typeAhead>
</xp:inputText>
</xp:td>
<xp:td style="width:46.0px">
<xp:inputText id="objCode">
<xp:eventHandler event="onchange" submit="true"
refreshMode="partial" refreshId="objCode" id="eventHandler3">
<xp:this.action><![CDATA[#{javascript:viewScope['objCode'+rowIndex] = getComponent("objCode").getValue()}]]></xp:this.action>
</xp:eventHandler>
</xp:inputText>
</xp:td>
<xp:td style="width:300.0px">
<xp:inputTextarea id="objDesc" style="height:40.0px;width:200.0px">
<xp:eventHandler event="onclick" submit="false" id="eventHandler40"></xp:eventHandler>
<xp:eventHandler event="onchange" submit="true"
refreshMode="partial" refreshId="objDesc" id="eventHandler4">
<xp:this.action><![CDATA[#{javascript:viewScope['objDesc'+rowIndex] = getComponent("objDesc").getValue()}]]></xp:this.action>
</xp:eventHandler>
</xp:inputTextarea>
</xp:td>
</xp:tr>
</xp:table>
</xp:panel>
</xp:repeat>
한 걸음 뒤로 물러나 야합니다. 달성하려는 기능은 무엇입니까? 결국 솔루션은 귀하의 접근 방식과 완전히 다릅니다. 그래서 좀 더 공유하십시오! – stwissel
버튼을 클릭하면 전체 반복 컨트롤이 새로 고침되고 inputTextArea에 대한 onChange 핸들러에서도 수행됩니다 (왜 OnChange가 자주 발생하며 확인란/라디오/드롭 다운이없는 경우). 그것은 roundtripping에 많은 문제를 만든다.) 응답은 약간의 시간 (네트워크, CPU)을 필요로하기 때문에 데이터가 다시 돌아 오면 클라이언트의 포커스가 엉망이됩니다. - 달성하려는 사용자 환경은 무엇입니까? 나는 아직도 그 부분을 놓치고있다. – stwissel
위의 태그에서 객체 추가 버튼을 클릭 할 때마다 반복 제어가 새로 고쳐지면서 필드가 동적으로 생성 된 새 테이블 행이 추가됩니다. 부분 새로 고침이있는 onChange 이벤트는 필드 안의 값을 캡처하고 viewScope에 설정하기 위해 내부의 모든 필드에 대해 설정됩니다. 사용자가 구매 주문에 대한 새로운 광고 항목을 추가하거나 완료 한 각 작업에 대한 작업 표를 추가하려는 경우이 논리가 도움이됩니다. 그 날 – shibu