플렉스 : 실행될 때 나는 RobotLegs를 사용하여 Flex 어플리케이션을 개발하고 있어요
2 시간을 널 (null) AsyncToken 관련을 반환 LCDS 서비스, 라이브 사이클 DS & 자바. 나는 LCDS를 사용하여 업데이트 기능을 구현하기 위해 노력하고있어,하지만 난 이상한 행동을 실행 해요 :
이것은 RobotLegs 'execute
명령 내에서 ActionScript 코드입니다, 업데이트를 수행하는 데 사용 :
model.currentRequestDetail
var token:AsyncToken = services.requestService.commit(new Array(model.currentRequestDetail));
responder = new AsyncResponder(resultHandler, faultHandler, token);
if (token) token.addResponder(responder);
는 RequestDetail 개체입니다 :
[Managed]
[RemoteClass(alias="be.fgov.mobilit.td.lcds.vo.RequestDetail")]
public class RequestDetail {
public var id:Number;
public var request:Request;
public var task:Task;
/**
* Constructor
*/
public function RequestDetail() {
}
}
처음으로 Actionscript 코드가 실행될 때 모든 것이 정상적으로 작동합니다. AsyncToken이 services.requestService.commit()
함수에 의해 올바르게 반환됩니다. resultHandler가 예상대로 실행되고 GUI에서 개체가 업데이트됩니다.
그러나이 코드가 두 번째 실행될 때 내 services.requestService.commit()
함수는 null 값을 반환하고 my resultHandler에는 결코 도달하지 않습니다. 자바 어셈블러에 도달하지 못했다고 생각합니다.
resultHandler(result:Object, token:Object = null)
faultHandler(result:Object, token:Object = null)
다음 faultHandler 오른쪽 서명이
var requestDetailService:DataService = new DataService("requestDetail");
requestDetailService.autoCommit = false;
모두 resultHandler & :
이
<destination id="request">
<properties>
<source>be.fgov.mobilit.td.lcds.assemblers.RequestAssembler</source>
<scope>application</scope>
<metadata>
<identity property="id" />
<identity property="task" />
</metadata>
<server>
<get-method>
<name>getRequest</name>
</get-method>
<sync-method>
<name>syncRequest</name>
</sync-method>
</server>
</properties>
</destination>
:
package be.fgov.mobilit.td.lcds.assemblers;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import be.fgov.mobilit.td.lcds.vo.RequestDetail;
import flex.data.ChangeObject;
import flex.data.assemblers.AbstractAssembler;
public class RequestAssembler extends AbstractAssembler {
public RequestAssembler() {
// TODO Auto-generated constructor stub
}
public RequestDetail getRequest(Map<String, Object> identity) {
return ServiceUtility.getLcdsService().getRequestDetail(identity);
}
public List<ChangeObject> syncRequest(List<ChangeObject> changes) {
Iterator<ChangeObject> iterator = changes.iterator();
ChangeObject co;
while (iterator.hasNext()) {
co = (ChangeObject) iterator.next();
if (co.isUpdate()) {
co = doUpdate(co);
}
}
return changes;
}
private ChangeObject doUpdate(ChangeObject co) {
RequestDetail requestDetail = (RequestDetail) co.getNewVersion();
co.setNewVersion(ServiceUtility.getLcdsService().updateRequestDetail(requestDetail));
return co;
}
}
이 어셈블러의 구성입니다 : 0
,이 코드 우리는 또한 사용자 정의 자바 어셈블러를 사용하고
입니다
긴 이야기 짧은 :
누구도 단서/경험을 가지고 있습니까? 두 번째로 services.requestService.commit();
함수를 실행하면 null이 반환됩니다. Asynctoken?
미리!
요청, 나는 내 서비스 클래스에서 (제거) 코드를 추가했다.당신이 볼 수 있듯이 정말 특별한 아무 일도하지 :
package be.fgov.mobilit.services {
import mx.data.DataService;
import mx.messaging.Consumer;
import mx.messaging.events.MessageEvent;
import mx.rpc.http.HTTPService;
public class LiveCycleServices {
public var requestService:DataService;
public function LiveCycleServices() {
requestService = new DataService("request");
requestService.autoCommit = false;
}
/**
* @param MessageEvent The event object that is dispatched by the Flex framework
* @return void
*
* This message captures the server push messages that need to trigger an update
* of the task list, since this is specific for every client and cannot be
* determined on the server side, coming from LiveCycle.
*/
private function messageHandler(event:MessageEvent):void {
taskListService.refresh();
}
}
}
이 내에서 그 결과 & faulthandlers가 추가되는 chode입니다 :
var token:AsyncToken = services.requestService.commit(new Array(model.currentRequestDetail));
var responder:AsyncResponder = new AsyncResponder(resultHandler, faultHandler, token);
if (token) token.addResponder(responder);
서비스 클래스 및/또는 requestEservices 객체의 코드는 무엇입니까? 언급 된 방식은 뭔가 솜씨가 있습니다. 적어도 Demeter의 법칙을 위반하는 것은 아닙니다.하지만 거기에서도 정적 방법을 사용하고 있습니다. Robotleg를 사용하는 경우에는 절대 수행 할 이유가 없습니다. –
안녕하세요 @AmyBlankenship, 시간을내어 읽고 답장을 보내 주셔서 감사합니다. 원래 게시물 끝에 서비스 클래스의 코드를 추가했습니다. 사전에 – WWWillems
결과 및 오류 메소드가 추가 된 코드를 추가 할 수 있습니까? 대부분의 경우 (LCDS를 포함하지 않음) 결과 W 결함 핸들러는 단일 매개 변수 인 이벤트 만 갖 고 비동기 토큰은 해당 이벤트의 특성입니다. 이전에 LCDS를 사용하지 않았기 때문에 현재 진행중인 작업을 정확히 파악해야합니다. –