2回目を実行したときに、私はRobotLegsは、LiveCycle DS & Javaを使用してFlexアプリケーションを開発していヌルのAsyncTokenを返します。 私は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は関数によってうまく返されます。 resultHandlerは期待通りに実行され、オブジェクトはGUIで更新されます。
ただし、このコードが2回実行されると、私の関数はnull値を返し、my resultHandlerには決して到達しません。 私はJavaアセンブラに到達していないと思われます。
これは私がDataServiceのを宣言した方法です:
var requestDetailService:DataService = new DataService("requestDetail");
requestDetailService.autoCommit = false;
resultHandler & faultHandlerどちらが正しいの署名があります。
resultHandler(result:Object, token:Object = null)
faultHandler(result:Object, token:Object = null)
を0
我々はまた、これはコードで、カスタムのJavaアセンブラを使用している:
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;
}
}
これはアセンブラの設定です:
<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>
ロングストーリーショート:
誰かが手掛かり/経験を持っているのですが、なぜ2回目にservices.requestService.commit();
関数を実行してnull Asynctokenを返しますか?
Thxを事前に入力してください。
は要求されたとして、私は私のサービスクラスから(剥奪)のコードを追加しました。あなたが見ることができるように は、本当に特別なことは何も起こっていない:
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();
}
}
}
これは私result- & 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の法則に違反していますが、もしあなたがRobotlegsを使っているならば、そこに静的メソッドを潜在的に潜んでいる可能性もあります。 –
こんにちは@AmyBlankenship、読んで返信する時間を取ってくれてありがとう。私は元の記事の最後にサービスクラスのコードを追加しました。 事前に – WWWillems
resultとfaultメソッドが追加されたコードを追加できますか?ほとんどの場合(LCDSは含まれません)、結果およびフォルト・ハンドラーは単一のパラメーター(イベント)のみを持ち、非同期トークンはそのイベントのプロパティーです。以前はLCDSを使用していなかったので、何が起きているのかを正確に把握する必要があります。 –