Ganesh schrieb:
Hi,

I'll remove _Extensions. Werner, you'll receive a patch. These are my next TODOs:

- Include the context parameter into the xhrCore classes.
yes that one is important after all the context is sent down to every event handler...

- Move the myfaces params into the context

yes... just to clarify for the others, we opted to put our specialized parameters which can adjust the engine on the fly on a per request call into the options list. The Spec already has specialized options which were remapped and reprocessed before going into the request, so it is probably one extension point we can use for our own specialized options. The other one is a central configuration datastructure which can be defined on a page per page base!


- Call getViewState() from within xhrCore and route the APIs getViewState so xhrCore
- Make the queue size configurable through myfaces params

Again an explanation we try to route calls wherever possible through the standard apis instead of relying on our internal code! External APIs are only allowed to call their subsequent adapter implementation objects, while even the deepest adapter is allowed to call the API itself!

I've got two problems with the JSF 2.0 final spec, maybe anybody on this list has got an idea, how to interpret these passages:

- In 13.4.2 the spec says: >>Partial view processing allows selected components to be processed through the “execute” portion of the lifecycle. ... the “execute” portion ... really is the “Apply Request Values Phase”, “Update Model Values Phase” and “Process Validations Phase”. The client also sends a set of client ids of the components that must be processed through the execute phase of the request processing lifecycle.<<

In 14.1 the spec says for jsf.getViewState: >>Encode the name and value for each input element of FORM_ELEMENT.<<

The client ids are sent through the execute parameter of the jsf.ajax.request method. Now, wich puzzles me is: Why should the client send names and values of ALL input elements if only the ones named in the execute parameter are being processed in phase 2-4? Performance would be greatly improved by sending only the required parameters.

Looking at the example given is the Javascipt API docs of jsf.ajax.request the spec probably wants to imply that the execute paramter should contain the pushed buttons name and value to trigger it to queue it's action , but this is definitely not covered by the words of the spec. Now here's my question: Do we implement what we think the spec was meant to say (and what the RI does) or do we implement what the spec actually says?

- Now here's my second problem: In 13.3.2 the spec says: >>All Ajax requests must be put into a client side request queue before they are sent to the server to ensure Ajax requests are processed in the order they are sent.<<

So, if you trigger a queue of n Ajax requests each of them would include the same ViewState that was collected at the time when the request was queued. But with each response the view state will have changed, making the former collected view state obsolete! With javax.faces.STATE_SAVING_METHOD==server the old view state may even be gone if the queue size exceeds the number of view states stored in the session. Also, with Ajax requests is it hard to think of a szenario,

I dont think this is an issue the view state is probably updated with each request and hence it does the states on every ajax request.

That causes some back button issues however!
But also have in mind that the new state saving is much more optimized only storing deltas of components changed so that the queues can be much deeper on the server! So instead of having an entire page as changed state per ajax request the queue now is filled only with one value, the one being changed by the input!


where you would want the server to process 35 JSF request when the user has already finished his input. Most of the time submitting the latest client state will be appropriate, while all intermediate requests (made while the 1st request was running) should become discarded. Wouldn't a queue size of 1 be more appropriate for JSF Ajax interaction then an unlimited queue size? If we have a consensus on this I would like to post this proposal as a MyFaces comment to the JSF 2.0 spec.


The problem is this depends on a case by case base, I don´t think there is an ideal solution. For instance the infamous data scroller is definitely something you cannot use with a queue size of 1, after all you dont want to use scrolling events if you want to keep the pages in between somehow in a scrolling div.

The queue size of 1 however is feasable probably for certain input szenarios (while it probably fails on per component validation usecases where single components are rerendered)

My personal preference would be since we are going for internal configuration options anyway for binding the layers, to enable a queue size via configuration so that page authors can cut the corner cases by applying spezialized myfaces logic.

Anyway here also we are back again to the first question, why the entire form? I have no clue, I assume it is probably that you have all values reachable but still only a subset of them is processed in execute and render.

Since I am not in the EG
anyone in the EG wants to comment on this.

There is another big issue, which I have pointed out to some members in the EG already. While the spec does not really explicitely state that xhr has to be used as transport, and wisely so, we have a huge problem on our hands specwise. The spec says, the transport has to be queued and done asynchronously the form values have to be encoded programmatically by getViewState before being sent down (no form submit). What this means is, that ppr of fileupload inputs is out of the game. To enable this you must use form submits with iframes as targets.

That does mean you cannot fullfill the spec if you want to support that?

Well before the argument crawls up, that JEE does not support file uploads by now, this argument is invalid because we only talk client side here, it does not matter for now if the servlet api supports full multipart requests by now, at least not for me.
We have a usecase here which about 100% of all users need!

All I can think of now is again a special configuration option to enable iframe transports and bend the spec in this regard as well. So that the base spec is covered as it should be and iframe transport is added in the fileupload case.


Werner




Reply via email to