users@woodstock.java.net

AJAX responses missing <state> element

From: Ryan de Laplante <ryan_at_ijws.com>
Date: Tue, 10 Jun 2008 10:18:32 -0400

> The Dynamic Faces life cycle also includes an XML state element
> containing an encoded client state string (i.e., the state of the
> entire JSF component tree). However, client state is maintained by the
> Dynamic Faces JavaScript.
https://woodstock.dev.java.net/docs/specs/ajax-architecture-spec.html


Below is the captured response of a DropDown in my sample application,
which works fine.


> <partial-response><components><render id="form1:prox"><markup><![CDATA[{"id":"form1:prox","widgetType"
> :"webui.suntheme.widget.dropDown","visible":false,"tabIndex":-2147483648,"labelOnTop":true,"submitForm"
> :false,"label":{"id":"form1:prox:prox_label","valid":true,"level":2,"visible":true,"widgetType":"webui
> .suntheme.widget.label","value":"Proximity To Elevator ","htmlFor":"form1:prox_list","required":false
> },"multiple":false,"disabled":false,"options":[{"selected":false,"isTitle":false,"value":"","label":""
> ,"group":false,"escape":false,"disabled":false,"separator":false},{"selected":false,"isTitle":false,"value"
> :"beside","label":"Beside","group":false,"escape":false,"disabled":false,"separator":false},{"selected"
> :false,"isTitle":false,"value":"near","label":"Near","group":false,"escape":false,"disabled":false,"separator"
> :false},{"selected":false,"isTitle":false,"value":"far","label":"Far","group":false,"escape":false,"disabled"
> :false,"separator":false}],"size":1}]]></markup></render></components><state><![CDATA[H4sIAAAAAAAAAO0abWwcxXXu7PN3Q0gIkBaSIw0xgebO92UnZxMSx3ZycLZT20kgiDp7t2PfJnu3y
> +6c70zkCH7QVqVFraBSK4KghUr9AX/aP4gfkFK1qCAqgdT+qISEqkoVEm2lCom2P0rfm73d29vbO9+dP5KgnqzZWe97b968r3nzZl75G
> /HlNbL94eR5YUkIyEJuMTCdOk/TbPj7v3/wha36ftlLSFElhOzTNRJJK9mAns8FFoQ01QOCqspSWmCSkgvMMoHRSSEnLFItkVXlvXMapVOKSD9deP2NVweOv9mHdApnCP6OV9KhRUZzOlABkksCE7QAfFeVHM0xPXBS0JgkyHOasEQ1XZBPS7QwoygMByFd5
> +clEf7CRf1Rcol4Cwc4fb9Jv0BTeSlwXl8oUwSCi5T4VGhDdixPfawTLCsTXwbaCizvKlhUEAEL2gqstvpYSSl3gfhkaC2sMMfaU
> w9rNq1JKrNEMtQEm6OKuEx8KWgr2OyojzWhaFniW4DWwooBVifZWw9rTFPUMaWQI91iqQfYGok2YVoTAMLQtt599t3np8NjT6NtGQwcAQa6yB11pSukqExusEafl
> /k/OoznmmZSMsM+zkZPU2yE15GNiJ2NvqbYiLizEeds7McgUSxpqEwCnYL7x0khR+XjmpJXSXfJCkMxk8Q+ILGF7HIncSoxnWdqnoEeNwU8yMEbE2tbioqmQFEO2xoRaDcguYvympJDqAk5
> +GS6ZE6jrzACmLc0IolejnYdyGKgCVm0q5pSNEUxDIi3NSKKHsS6GpIY5u7bX3dV1JRFjer6qKCRPrX8ErKbSmf9FWg0z5iSI50p
> /mwdM9wyZqRlzGjLmLFiHjHx57V6XeUeLG438uwqzySIk4KemRRUX+effvXrm8+930a8E6RHVgQRFjWmaAnSzTIg+owii0X1viOcREehiy9rMAAje
> +1KB+5gpQwcOzUzMz41N386MX5mfmZ6eg4HDzLid4Odnjw5PYXQibFZ4G17mbejmiYsJyWdFZ/44PYfvy0830Y8CdKuS49RngJ6Cu2YXDEzeyra0o0wDhm15sozyVFFkamQe8
> +vPf6Hy//5u5d4zhLfkiDngZyHiztGVKDRc2JuMjk/enQ2cQxegpighUDkKlDbWuYuqaQFmV76143nLg/8+xMvaU+QrgxIMw2JQJJ0ppV8jmnLjGzjuWwQOQjOMk3KLQ4nSRe
> +5oEwjgrvnUuCJgk5xl+L6ufwY8R77Cg0oGFCKieSyDEKyce2P7/48mdPfOugF8VSmojJIoebymdTVPvmKz+8vffZj54yM+evqKpqmYPHxVh8NmPB3oEqvXvw3wP8Y6hCEUZCardARzZfksCrH5z
> +68e3Xzxu8uRhYL5SToRvZdZg0vvcQwpPwU6ATVJtFvPwh9755b3PXH5v0ku8SdKdlgVdnxKypnB7dIAROQ4jNxvqkJTgLAWRy9JjQkqmIHNU7y7TzagcOI3yHC
> +qGHgg7cNMr+31n6d23/m7H2F+p5FbDd6qQQs9jz/80ZX//sDLwbZbYGWIl578zuw/z34wwqcPyfSWr140rIwb8srqGwZV5QlmxGoGsRmC6VVjcnj
> +2dHUNYK2Zo3AWzYC3F8wM4F3hqMHTNRJm6axN63yx4xdHtyeVpEHpnoleSSspo48DHjVZc7l3o7WZ8/3SfZ9z9oEgLJcTQAAUxLAI1ZTTwAIXzYD1dU4yjRW
> /+CEqyvazrJonTpoSjJczqtIBneuJclcsJo6kjHgVVwEdgbBV5W8BoEnqLNlGdZASlkgretlronL9NpbDp4daDHhGCxj+Em2GpPfW6v5NfbYqt2a3Xja2XpAN7bTazJhHgZWURTu
> +EuK+obV1FGUAW/+YPGQchK7a/+w+b7tANZnDsjCspJncf+iJokOKx909OoGw1ubFWCvKcByVcHWD9v6EVPxg8y2S2WVSS+zklirF7Z6EasXZeUkcE0q41pfRWVYbimp7LtWU0dlHN4edap
> +LgGkp66Hdbv0drmsYFvcVjW34AP5rE9iNKtXCspbKag99iCkMxDUVme5EgRTiRMn20wcyyJWGtvdAS1GbuAqiVu4SPU5u8Rd9nsFSVykdjqQSDrCtVrVOgHMaWhkty05mqQso4iV2dGHM5cO9j30zD
> +M7GinlfY4YX8RfOepv3wWfdpbqpLNFQ6QO6uEMw/2D7FX57nVsQyIlq6Q9iVFEsvmzMgee34IG3sQmw1hHP8B4rObHSM7YG9ZlLISW
> /bPKf5xmS4JsNPh8zzyODFEhHB3WLwY1ESIL36NsryW8y8Isk6H3Y2XkbtlugBRJxwaVIvDfqaocX/0IHZVRZewhhj3CyldkfOMq
> s5xXaLUoAPGDcTlg61RK5YIW4Rj5sbfxc9ucvUaEMxuhy3GHbVLVlXNtBvqrpqGyqsShiTftsnBmD2yxsk4xV35gu2lTQ4a2HmtmYgRbjFihNcQMfiG
> +HKlrbxpiO5Ky0EBH2+5uW+4EffFzm+r3NM3ISt13TG8Du54aHCj3LF+4rwJ7hiOO2r4rKqqX8niHw1pffKFdrlIiy4XWYPL8Y3585vlcpHWXa5rlIr
> +uWWVOq2/RnrGyD3VLhWKRr+wPhWJOw6kWNURlZtPebZunE+1sHk+THaaRqMpSnZaRT3p/JRshdxRq3h/zOzbTdzaqCDlF8pzZ0aZ0qTDD98qFLPFZVINlJpAiVRPCyULjREs9faVWQlFVTsPW
> +08zNEiQ5UmRxhW+vwpRROpdm//QL8/TWVZFUSsOlrvuiqkrXcsJN7bz/FmlMJJqk1IVBb7D/fU0k9jVTNPAJugcxIx2yQQIIRsd48w7fAIEzdozEG3MTtGUlqw9oDrFNhr63rH
> /Mz41Nj4zPjY/NSpZHL+9NHkqfF5Q/UenEG3MYMUFRk/D3XEWEcdo+QGjMSqdwvOzYkteOLJA81RzeFObxXuJvuq/cg1+pLqyIvs
> +x7NU5pregmwRwjYj91kO4uQcheoiAz37Z995P5z397TxivLOPs2e127vIRlFRH2ZgbvF/veyH3vN6ErXtKRIL1SFqZ2gkqLGZYgPfztjCSyzFnSrVNV0HC3lIR9crZ8fNHFX47KrPTeyRRFZhLndxg2g7fZBW
> +MPEtlWIITsNnuu/vTDz8eytziJb6zpEuUdHQ38azp8UnSK0IPC13AamkAnxVz8YUffVSetJRuDeHhQnnBvfJ56UdAlqhMz2n4DPr4OurD1EsNoPYHICzA4wI87CDFOusnI
> +/oGaUwmteXEzkRL5AoGqatopLOZ9H8YNsDG1Dsji4nxLv6DbvmR9T9+wMaXcCzN/PfYOhfswGU+niI2786TQOsOZKNpNfq9biD3W7NPm5djGC2SxKui
> /m59V7M1xS4h9wCd+9IEFeL4IYtFwerR8XHwQ0Z7JD7YIev0rqEY+PZkud+ZLTX5jasdBmloWUIKUyv95pSKammFxPkaY4z2W5FPPxyH29qBMSeE7BE
> +PluHcJiBl5qAPZNUlHKZ03QtiwVa0B2J5WCBSYrBUec7eWf/EmUdXWoXWol1P4/LNrC4i22Ocdt96RYxa0p1+D43LUUHMMD7pGDbchgoU2MieHwtRUTa
> +XqnEnkvafsOsy4puYIkupViV0do1SXRMgZO1K8Uyvnm6ICBrccPGqAtE0gRNtCJUCx0WOGGhWWdQgfm1802VHWdbx8tZDZ7xm6xo73r6nYEdnM2BGtHgy3
> /EFecqidw3250UJp/YLQEbLDunhkO21eafhqJjf0bZbaLQpI/sXyzJhbDbV06FNBTcXpb5kT9Av+CUGCXaBfYLUdwfnFtJ3e14x3RiYyfBsb9w8NYG3SKFqGIhGraBmpcQ4w7C
> /gljfuDx8CTKczgneoQl7H6kP76KnZh2qzVEuBe13+17EWVQ6SrdZ9C+OmwEojl0a5Ar9USnoMPKT3E7vudtfUnUmjojTsO4micb9UVOO
> /jIytnqZZxgXpGpd+nfMft1EYucdNz4ZNRGOOQnad+HsVlRpuUan88O+nFaHG2+3QW8cM1UEFTSpuvDnFaXyM9dRcLBa+HjQXaVFz
> /AzppVU0d0zIpc2T843SXJqPsWE+dyh8rWou2qLmokjv5fqaaz8BuWeTenuwOb3plMESq+p3XdyzJOkSpBV74lx1K+vphEPXhSpjLaoyhvR
> +tooqZzNKoUlVnlm7KpmWX1dNDg6Fm9Tk/wD1AmaFtDsAAA==]]></state></partial-response>
The sample application code was designed to be copy/pasted into the real
application once I got it working. When I make a selection in the real
application, I see the AJAX-request being sent, the response coming
back, but no <state> element:

> <partial-response><components><render id="form1:FLOORLEVEL"><markup><![CDATA[<span id="j_id124"><script
> type="text/javascript">
> //<![CDATA[
> webui.suntheme.widget.common.createWidgetOnLoad("j_id124",{"id":"form1:FLOORLEVEL","widgetType":"webui
> .suntheme.widget.dropDown","visible":false,"onChange":"document.getElementById('form1:SMOKE').refresh
> ('form1:BEDTYPE,form1:ELEVATOR,form1:FLOORLEVEL,form1:SMOKE'); return false;","tabIndex":-2147483648
> ,"labelOnTop":true,"submitForm":false,"label":{"fragment":"<label id=\"form1:FLOORLEVEL:FLOORLEVEL_label
> \" for=\"form1:FLOORLEVEL_list\" class=\"LblLev2Txt_sun4\">Floor Level <\/label>"},"multiple":false,"disabled"
> :false,"options":[],"size":1});
> //]]]]><![CDATA[>
> </script></span>]]></markup></render></components>

What's more interesting is even though I get the value change events for
each of the DropDowns, when the form is finally submitted only the first
one has a value. The rest are stored as null.

Firebug is able to show me the response data from my test application.
Whenever I click on any of the request/response pairs, I can see the
stuff I pasted above. In my real application, often it says
"Loading..." as if the server hasn't responded yet. Sometimes it will
show me the response for the first request but not the other two.


I've spent more than a day looking at this, and will continue looking at
it until it works. I'm just hoping someone might recognize something I
did wrong, because this stuff is supposed to be easy. It's not supposed
to be endless problems one after the other. I've spent a week trying to
make 4 dynamically rendered dropdown lists work with AJAX!



Thanks,
Ryan