On Fri, Apr 11, 2008 at 5:01 PM, Ouyang, Landon - ES/RDR -Gil <[EMAIL PROTECTED]> wrote: > I figured out the solution: > > I needed to remove the event properties from the conditional > transitions. So if I change the state to: > > <state id="six"> > <datamodel> > <data name="result"> > <value>0</value> > </data> > </datamodel> > <transition cond="result.value eq '1'" target="zero"/> > <transition cond="result.value eq '0'" target="five"/> > <transition target="three" event="display.prev"/> > </state> > > the code will work! Am I missing any other crucial details? > <snip/>
Not really, but couple of comments: * At a quick glance, I suspect you don't need the <datamodel> specified declaratively, so you can just remove the entire <datamodel> element (we are setting "result.value" via Java handlers). A brief discussion about datamodels is here: http://commons.apache.org/scxml/guide/datamodel.html * When I gave the example (below), I intended "fooresult.success" and "fooresult.numfailures" to be expressions of the flavor bean.property i.e. fooresult was an instance of: class FooResult { get/setSuccess() get/setNumfailures() } Generally better if you want to return a data structure, rather than multiple "flat variables" (your example is fine, for one value its much overhead). -Rahul > -- > Landon Ouyang > Member Technical Staff > ITT Electronics Systems, Radar Systems - Gilfillan > 7821 Orion Ave, > Van Nuys, CA 91406 > (818) 901-2982 > > > -----Original Message----- > From: Ouyang, Landon - ES/RDR -Gil [mailto:[EMAIL PROTECTED] > Sent: Friday, April 11, 2008 1:34 PM > To: Jakarta Commons Users List > > Subject: RE: [SCXML] W3C specs compatibility and state transition issues > > Hi Rahul, > > Thanks for the quick and helpful response. I am still having trouble > creating a conditional state transition. Using your example, I added a > conditional transition in my XML file as follows: > > <state id="six"> > <datamodel> > <data name="result"> > <value>0</value> > </data> > </datamodel> > <transition cond="$(result.value eq '1')" target="zero" > event="display.next"/> > <transition cond="$(result.value eq '0')" target="seven" > event="display.next"/> > <transition target="five" event="display.prev"/> > </state> > > My handler for state 6 is the following: > public void six(){ > getEngine().getRootContext().set("result.value", "1"); > } > > I have a NEXT button in my GUI that fires off the 'display.next' event. > In state 5, I hit this NEXT button and this code gets executed. I would > assume that when I hit the NEXT button again I should be in state 0, but > instead I stay in state 6 indefinitely! > > Can you tell me what I am doing wrong? > > -- > Landon Ouyang > Member Technical Staff > ITT Electronics Systems, Radar Systems - Gilfillan > 7821 Orion Ave, > Van Nuys, CA 91406 > (818) 901-2982 > > -----Original Message----- > From: Rahul Akolkar [mailto:[EMAIL PROTECTED] > Sent: Thursday, April 10, 2008 6:22 PM > To: Jakarta Commons Users List > Subject: Re: [SCXML] W3C specs compatibility and state transition issues > > On Thu, Apr 10, 2008 at 8:30 PM, Ouyang, Landon - ES/RDR -Gil > <[EMAIL PROTECTED]> wrote: > > Apologize for the duplicate e-mail, I had to be schooled on the proper > format by Mr. Cooper. :) > > > > > > I am a new user of Commons SCXML. I have two very basic questions: > > > > 1) How much of the W3C specs for SCXML is supported with Common > SCXML? Are all of the tags recognized? > > > <snip/> > > Not supported: > <anchor> (supporting this one is optional for engines) > <validate> > > Experimental (due to missing pieces in draft spec, see TBD markers for > example): > <invoke> > > > > 2) Basing my code off of the simple stopwatch example, I created > a simple Java app that navigated across 10 states. I noticed that if I > put any code in the state handler methods that fires off events to > transition to other states, the application still thinks I am in the > *previous* state! For example, if I am in the state 5 subroutine and > fire off an EVENT_NEXT event to go to state 6, the app actually keeps me > in state 5 because it still thinks I am in state 4! Is it true that the > state machine transitions *after* the handler for the new state is > called? If so, how do I put custom code so that the state can make > transition decisions based on certain conditions? > > > <snap/> > > You'd have to do that asynchronously (the executor is still processing > the earlier event). However ... > > I'd store the result of "certain conditions" in the datamodel, and > query the datamodel later, like so: > > public void foo() { // handler for state "foo" > > // check certain conditions, create someresultbean > > getEngine().getRootContext().put("fooresult", someresultbean); > } > > And further, in a totally fictitious example: > > <state id="foo"> > <transition cond="fooresult.success" target="bar"/> > <transition cond="fooresult.numfailures gt 2" target="exit"/> > <transition cond="not fooresult.success" target="foo"/> <!-- try > again --> > <!-- foo's other content --> > </state> > > -Rahul > > > > > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
