Details
Description
Issue Links
Activity
- All
- Comments
- History
- Activity
- Remote Attachments
- Subversion
Picked choice a) for now.
Serialize only event and changed form elements. Captured changed elements. Maintain onchange listeners for the updated elements.
Modify commandLink and selectInputDate renderers to not use hidden fields. Instead the additional parameters are sent as optional parameters for iceSubmit/icesubitPartial function.
Simplified how optional parameters are added when iceSubmit/iceSubmitPArtial is invoked.
Looks like there is a Hashtable implementation around (that could be used for choice b)) : http://www.timdown.co.uk/jshashtable/ . The described performance gains are promising.
Philip has completed testing the comp showcase using the latest version of the delta-submit prototype (with all hidden fields converted in the comps). Here are the results:
delta-submit, what's not working in comp showcase
*******************************************
- panelCollapsible doesn't open or close
- selectBooleanCheckbox firing partial submit, but not maintaining state
- value of checkbox not being sent in post
- selectOneMenu not working
- partial submit fires, but value not being sent in post
- selectManyListbox not working
- partial submit fires, but value not being sent in post
- selectOneRadio not working
- partial submit fires, but value not being sent in post
- selectManyCheckbox not working
- inputText and inputSecret crashing on partial submit
java.lang.RuntimeException: wrapped Exception: java.lang.NullPointerException
com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:162)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
com.icesoft.faces.webapp.xmlhttp.BlockingServlet.service(BlockingServlet.java:56)
root cause
java.lang.NullPointerException
com.icesoft.faces.context.BridgeFacesContext$8.servlet(BridgeFacesContext.java:757)
com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.detectEnvironment(ServletRequestResponse.java:262)
com.icesoft.faces.context.BridgeFacesContext.processPostback(BridgeFacesContext.java:724)
com.icesoft.faces.context.View.processPostback(View.java:141)
com.icesoft.faces.webapp.http.core.ReceiveSendUpdates.service(ReceiveSendUpdates.java:67)
com.icesoft.faces.webapp.http.core.RequestVerifier.service(RequestVerifier.java:31)
com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer.service(PathDispatcherServer.java:24)
com.icesoft.faces.webapp.http.servlet.BasicAdaptingServlet.service(BasicAdaptingServlet.java:16)
com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:53)
com.icesoft.faces.webapp.http.servlet.SessionVerifier.service(SessionVerifier.java:26)
com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:137)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
com.icesoft.faces.webapp.xmlhttp.BlockingServlet.service(BlockingServlet.java: - selectInputText not showing drop down (maybe due to selectOneMenu not working)
- popup calendar not rendering
- chart not changing on type selection (maybe due to selectOneMenu not working)
- progress bar demo, click on start with standard mode
javax.faces.FacesException: Please define valid textPosition [top|bottom|left|right|topcenter|bottomcenter|topright|bottomright|embed]
com.icesoft.faces.component.outputprogress.OutputProgressRenderer.buildLayout(OutputProgressRenderer.java:236)
com.icesoft.faces.component.outputprogress.OutputProgressRenderer.encodeEnd(OutputProgressRenderer.java:84)
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:861)
com.icesoft.faces.renderkit.dom_html_basic.DomBasicRenderer.encodeParentAndChildren(DomBasicRenderer.java:370)
com.icesoft.faces.renderkit.dom_html_basic.GroupRenderer.encodeChildren(GroupRenderer.java:96)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
com.icesoft.faces.renderkit.dom_html_basic.DomBasicRenderer.encodeParentAndChildren(DomBasicRenderer.java:358)
com.icesoft.faces.renderkit.dom_html_basic.GroupRenderer.encodeChildren(GroupRenderer.java:96)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
com.icesoft.faces.renderkit.dom_html_basic.DomBasicRenderer.encodeParentAndChildren(DomBasicRenderer.java:358)
com.icesoft.faces.renderkit.dom_html_basic.GroupRenderer.encodeChildren(GroupRenderer.java:96)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:492)
com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:497)
com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:497)
com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:497)
com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:497)
com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:497)
com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:497)
com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:497)
com.icesoft.faces.facelets.D2DFaceletViewHandler.renderResponse(D2DFaceletViewHandler.java:282)
com.icesoft.faces.application.D2DViewHandler.renderView(D2DViewHandler.java:159)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
com.icesoft.faces.webapp.http.core.JsfLifecycleExecutor.apply(JsfLifecycleExecutor.java:19)
com.icesoft.faces.webapp.http.core.ReceiveSendUpdates.renderCycle(ReceiveSendUpdates.java:132)
com.icesoft.faces.webapp.http.core.ReceiveSendUpdates.service(ReceiveSendUpdates.java:74)
com.icesoft.faces.webapp.http.core.RequestVerifier.service(RequestVerifier.java:31)
com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer.service(PathDispatcherServer.java:24)
com.icesoft.faces.webapp.http.servlet.BasicAdaptingServlet.service(BasicAdaptingServlet.java:16)
com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:53)
com.icesoft.faces.webapp.http.servlet.SessionVerifier.service(SessionVerifier.java:26)
com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:137)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
com.icesoft.faces.webapp.xmlhttp.BlockingServlet.service(BlockingServlet.java:56)
- rich text demo page won't load
- dataPaginator numbered page links not working
- panelTabSet tab area disappears when clicking on tab
- js error: window.XDiy#2 failed to insert element: <script id="XDiyEt2dz64bEwY236Kdgg:2:dynamic-code" type="text/javascript">...</script> TypeError: document.getElementById("iceform:icePnlTbSet:0.1") is null
- popup won't close
deltasubmit revision# 20198
server: Tomcat6.0
Not able to access all components in the component tree. Following categories cannot be tested:
1) Extended Components
2) Table
3) Layout Panels
Serialize triggering element even if is not of 'submit' type since it is no longer serialized together with the rest of the form elements.
Refactored panel collapsible to send additional parameters. This makes it possible to access and test the enclosed components.
Fix NPE that occurs for 'text' elements that do not contain text.
These are the components that work now after a few framework and component level fixes:
panelCollapsible - applied renderer level fix so we can access the enclosed components
selectOneMenu - applied framework level fix
selectManyListbox - applied framework level fix
calendar popup - applied framework level fix
inputText, inputSecret - applied framework level fix
chart - selectOneMenu fix makes the chart selection work
progress bar - the previous fixes seem to have fix this too
rich text - loads
These are the components that still need to have the "additional parameters" refactoring applied:
dataPaginator
panelTabSet
panelPopup
selectBooleanCheckbox
selectManyCheckbox
The following components has been refactord.
-dataPaginator
-panelTabSet
Modified: D:\work\development\head\svn\ossrepo\icefaces-ee\scratchpads\deltasubmit\icefaces\component\src\com\icesoft\faces\component\datapaginator\DataPaginatorRenderer.java
Modified: D:\work\development\head\svn\ossrepo\icefaces-ee\scratchpads\deltasubmit\icefaces\component\src\com\icesoft\faces\component\paneltabset\PanelTabSetRenderer.java
Sending content: D:\work\development\head\svn\ossrepo\icefaces-ee\scratchpads\deltasubmit\icefaces\component\src\com\icesoft\faces\component\datapaginator\DataPaginatorRenderer.java
Sending content: D:\work\development\head\svn\ossrepo\icefaces-ee\scratchpads\deltasubmit\icefaces\component\src\com\icesoft\faces\component\paneltabset\PanelTabSetRenderer.java
Completed: At revision: 20371
selectManyCheckbox done.
Revision: 20381
Modified : /icefaces-ee/scratchpads/deltasubmit/icefaces/bridge/lib/extras/extras_util.js
Modified : /icefaces-ee/scratchpads/deltasubmit/icefaces/component/src/com/icesoft/faces/component/ext/renderkit/SelectManyCheckboxListRenderer.java
selectBooleanCheckbox done.
Revision: 20395
Modified : /icefaces-ee/scratchpads/deltasubmit/icefaces/bridge/lib/extras/extras_util.js
Modified : /icefaces-ee/scratchpads/deltasubmit/icefaces/component/src/com/icesoft/faces/component/ext/renderkit/CheckboxRenderer.java
Mircea reports that radio-buttons are not working correctly.
Avoid generating parameters from the server-side document for the elements that normally trigger a form submission. Elements such as input[type=image], input[type=button], input[type=submit], input[type=reset] are serialized during a form submission only if they triggered it. So the fix was to simulate the same behavior on the server side.
QA Testing Report:
deltasubmit revision# 20413
Server tomcat6
Firefix3.5 browser
Autocomplete doesnot work correctly.
After selecting a city form the drop downlist that city's details are not displayed at the bottom of the page. Now if the user selects city in the second autocomplete box, the first city details are displayed at the bottom.
Media
SEVERE: Exception occured during rendering on http://localhost:8080/component-showcase/block/send-receive-updates [/showcase.jspx]
javax.faces.FacesException: Problem in renderResponse: javax.faces.el.Evaluation
Exception: javax.el.ELException: /WEB-INF/includes/examples/custom/outputMedia.jspx @76,49 style="#
Caused by: javax.faces.el.EvaluationException: javax.el.ELException: /WEB-INF/includes/examples/custom/outputMedia.jspx @76,49 style="#{media.style}
": Error reading 'style' on type org.icefaces.application.showcase.view.bean.examples.component.outputMedia.Media
Caused by: javax.el.ELException: /WEB-INF/includes/examples/custom/outputMedia.jspx @76,49 style="#
{media.style}": Error reading 'style' on type org.icefaces.application.showcase.view.bean.examples.component.outputMedia.Media
at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:76)
DataPaginator: Paginator functionality disappears if user click on any button on pagination (next, last etc)
following seen on the server
WARNING: DataTable iceform:data has invalid rows attribute.
Following components couldnot be tested because of radio buttons not working:
Selection
Row selection
progressbar
Menubar
Split Panel
Stacking panel
Static tabset
Position Panel: After repositioning Edited rank table does not get updated
Tooltip not working for provinces
Gmaps:The controls disappear of user selects a city. Also cannot search a city by entering its name in the input text box
Buttons & Links scripts were failing but could not reproduce the problem manually (need to investigate)
Collapsible Panel scripts were failing but could not reproduce the problem manually (need to investigate)
Confirmation: scripts were failing but could not reproduce the problem manually (need to investigate)
Regards,
Mandeep
Radio buttons fixed.
Revision: 20415
Modified : /icefaces-ee/scratchpads/deltasubmit/icefaces/bridge/lib/extras/extras_util.js
Modified : /icefaces-ee/scratchpads/deltasubmit/icefaces/component/src/com/icesoft/faces/component/ext/HtmlSelectOneRadio.java
Modified : /icefaces-ee/scratchpads/deltasubmit/icefaces/core/src/com/icesoft/faces/renderkit/dom_html_basic/RadioRenderer.java
Problem in outputMedia: can't reproduce. See it working at http://screencast.com/t/Y2M4ZTY3MWE
(Fixed by fixing radio button problem?)
tooltip panel fixed.
Revision: 20422
Modified : /icefaces-ee/scratchpads/deltasubmit/icefaces/bridge/lib/extras/tooltip_panelpopup.js
Fixed checkbox delta-submit.
The previous algorithm for server-side parameter generation was not able to detect unchecked checkboxes. By using 'ice.event.captured' event parameter the server-side is now able to detect when a checkbox or a group of checkboxes are unchecked and properly generate the necessary parameters.
Also, for many-checkboxes submit the captured changed elements (using onchange listeners) are cleared to avoid serializing input elements twice.
From Mandeep:
Popup Panel: use Modal popup panel then use Draggable panel. But both Draggable and Modal popup are shown.
Fixed. Problem is not with popup panel, but with button events.
Revision: 20439
Modified : /icefaces-ee/scratchpads/deltasubmit/icefaces/core/src/com/icesoft/faces/renderkit/dom_html_basic/ButtonRenderer.java
There is another problem has been noticed with the button component. Please see the attached snapshot.
The fix applied makes sure that submitting type elements found among the changed elements are not serialized.
Serialize the element that invokes a full submit (iceSubmit) during a keypress event.
Okay, after review it seems that the approach taken with this prototype is not going to be feasible to pursue further, or possibly include in the product in the future. Work is stopped on this prototype.
As it stands, the prototype has the following:
Key Limitations
- Only works with ice: components (not h:, or other 3rd party or custom components) as it requires specific component changes to function correctly. This is deemed to be a fatal requirement due to the increased complexities involved in supporting the ice components in both "delta submit" and normal submit modes.
- Not configurable. The prototype always uses Delta-submit mode, and cannot be configured not to.
Known Issues:
- QA testing has found that the regression tests associated with JIRA list below are failing with the prototype. These issues will remain unresolved:
Navigation-redirect - not working
Navigation-forward - not working
Navigation-facelet - not working
ICE-751- selectManyCheckBox acting like selectOneRadio
ICE-4011 - calendar AM- PM not working
ICE-3627 - <h:inputText valueChangeListener="#
"
ValueChaneListener not working
ICE-3530 - when alphabet is entered in the autocomplete textbox Number Format exception is thrown
ICE-3051 - navigation not working
ICE-2031 - remove selection not working for last selected item in the selectManyMenu
ICE-1993 - page is not rendered correctly. One full panelGrid is missing on the page
ICE-5118 - Number Format exception when removing a tab, that was added by the user.
Some other exceptions seen in exception log
ICE-3530 - Number Format exception
ICE-3332 - NullPointer Exception
ICE-3028 - RunTime Exception
However, our sample applications (Component Showcase, Auction Monitor, Address demo) all seem to function well.
The prototype may be useful as a demonstration of the kind of bandwidth reduction that can be expected from this type of "delta-submit" feature, but should not be used in anything other than an experimental context.
We are planning on approaching the delta-submit feature from a different angle for ICEfaces 2.0 with a solution that will be completely transparent to the application and component developers, be configurable, etc.
When we started to look at this issue we had two different implementations in mind:
a) The idea for the first implementation is to send only the minimal information such as event and triggering element data. The rest of the parameters that correspond to elements that have not changed since the last submit will be reconstructed on the server-side from the DOM document and then put into ExternalContext's parameter maps before decode phase is ran.
b) The idea for the second implementation is to calculate the parameter difference between submits. The full set of parameters will be reconstructed on the server-side by applying the changes send in submit to the set of parameters stored during the previous submit.
Advantages:
a) Easy to implement. No heavyweight calculations needed. The code on the client side needs to change very little. Reconstructing the full set of parameters on the server is straight forward, just a simple serialization of the form elements.
b) ICEfaces components or third party components will work seamlessly since the parameter diffing will work also with the parameters created by hidden input elements.
Disadvantages:
a) ICEfaces components that use hidden input elements to submit additional parameters will need to be changed. Since the form is not serialized anymore the additional parameters will have to be defined directly in the event callback. Third party components that use hidden fields won't work.
Also, onchange callbacks have to be configured for the form elements. This is necessary in case the element values are changed without an immediate submission. The onchange listeners will record the changed elements and they will be serialized during the next submit.
b) Calculating the parameter difference on the client side is quite expensive, especially for large forms. In order to significantly improve performance we need to implement or find a proper Hashtable implementation. This way lookups will be much faster when calculating what parameters are added or removed.
Also, for sending the parameter differences to the server we have to come up with a protocol for describing parameter addition, removal and update.