Child pages
  • Web Client compatibility overview

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

Servoy's claim to fame is that you can use the same forms and code in both Servoy Smart Client and Servoy Web Client. While it is perfectly possible to create applications that look and work exactly the same for both Smart and Web Client you need to keep in mind what the differences between the two are - very often caused by limitations in HTML. In this page, you will find a comprehensive overview of differences and what to keep in mind when developing for both Servoy Smart Client and Servoy Web Client.

Development tips
HTML Table
classservoy sSummery
Colgroup Tag
Column

Column

Table Row (tr)
styleheight: 30px;
Table Head (th)
What
Table Head (th)
Comment
Table Row (tr)
Table Cell (td)
Use application.getApplicationType() to determine which type of client your solution is running in and branch accordingly, when using functionality that is not supported in both clients.
Table Cell (td)

Table Row (tr)
Table Cell (td)
Use style sheets and style classes as opposed to specifying styling on elements directly by setting their properties.
Table Cell (td)
Besides a more consistent styling throughout your solution, it means less styling info is send to the client, thus the Web Client performance will improve.
Table Row (tr)
Table Cell (td)
Transparent PNG images are not supported by Internet Explorer <= 6. If you need transparent images and support for Internet Explorer <= 6, use transparent GIF's.
Table Cell (td)

Table Row (tr)
Table Cell (td)
Use short running locks and transactions, preferably acquire and release them within the execution of the same method.
Table Cell (td)
If user interaction is required to release an acquired lock of transaction and the user closes the browser/navigates away from the Web Client page without releasing the lock or transaction, the lock/transaction will remain until the Web Client session times out and is destroyed. Use autosave=false to accumulate edits without having a lock/transaction active.
Table Row (tr)
Table Cell (td)
Keep in mind that the user can, at any time, navigate away from your solution, by opening a bookmark, typing a new URL etc. (see previous remark)
Table Cell (td)

Table Row (tr)
Table Cell (td)
Try to minimize the use of comboboxes/editable fields with (long) valuelists attached, especially in combination with forms in Tableview.
Table Cell (td)
Use type-ahead fields for long valuelists or consider a edit popup dialog with search capabilities. For each field/combobox, the entire valuelist has to be included in the HTML source of the Web Client.
Table Row (tr)
Table Cell (td)
Minimize the use of dialogs, both modal and non-modal, and create a flat interface instead.
Table Cell (td)
Multiple windows/dialogs, in general, is not a concept users like when using a browser. Popup blockers might block your (non-modal) dialog from showing.
Table Row (tr)
Table Cell (td)
Minimize the switching between forms as much as possible. For example: Add search functionality directly on the form, instead of on a separate form.
Table Cell (td)
Minimal switching between forms provides a faster user experience.
Table Row (tr)
Table Cell (td)
When using images that do not come from the Servoy Media Library, do re-use images. For example: On a TreeView, when using the same image on multiple nodes, do not store the image for the node on each node record, but link to one shared image stored somewhere else.
Table Cell (td)
This means that only one image needs to be downloaded to the Web Client, instead of multiple copies of the same image.
Table Row (tr)
Table Cell (td)
Always design for a minimal resolution and allow the UI to grow
Table Cell (td)
This advice is also applicable for Smart Client development, but the Smart Client is more forgiving when not properly sizing elements and forms
Table Row (tr)
Table Cell (td)
Always place elements within the bounds of the form(part)
Table Cell (td)
Not doing so will result in (unwanted) scrollbars in the Web Client. The Smart Client is more forgiving in this area


Differences:
HTML Table
classservoy sSummery
Colgroup Tag
Column

Column

Column

Column

Table Row (tr)
styleheight: 30px;
Table Head (th)
What
Table Head (th)
Smart Client
Table Head (th)
Web Client
Table Head (th)
Comment
Table Row (tr)
Table Cell (td)
Automatic closing of a client that has been idle for a certain period of time
Table Cell (td)
Possible with plugin/additional coding
Table Cell (td)
Servoy Web Client is automatically closed when the HTTP session expires on the application server(configurable).
Table Cell (td)

Table Row (tr)
Table Cell (td)
Commands
Table Cell (td)
Fully supported
Table Cell (td)
Commands are not supported, as there is no menubar in the Web Client for the user to trigger the command. Using the window plugin, it is possible to simulate the behavior of Servoy Smart Client.
Table Cell (td)

Table Row (tr)
Table Cell (td)
Method execution after the method shows a modal dialog using the dialogs plugin or application.showformInDialog(...).
Table Cell (td)
The method is halted until the modal dialog is closed.
Table Cell (td)
The method continues to execute.
Table Cell (td)
Web Client behavior will most likely be brought inline with the Smart Client behavior in a future version of Servoy.
Table Row (tr)
Table Cell (td)
autosave mode
Table Cell (td)
autosave is triggered when clicking outside of an element.
Table Cell (td)
Clicking outside an element will not trigger a save. An explicit save button is required. This also means that onRecordEditStop is not fired immediately
Table Cell (td)

Table Row (tr)
Table Cell (td)
Default navigator
Table Cell (td)
Slider to browse through records
Table Cell (td)
Buttons to browse through records
Table Cell (td)

Table Row (tr)
Table Cell (td)
Browsing through records in Tableviews and portals
Table Cell (td)
Scrollbars
Table Cell (td)
Paging
Table Cell (td)

Table Row (tr)
Table Cell (td)
plugins.http.*
Table Cell (td)
Operates client side
Table Cell (td)
Operates server side
Table Cell (td)

Table Row (tr)
Table Cell (td)
plugins.file.*
Table Cell (td)
Operates client side
Table Cell (td)
Operates server side
Table Cell (td)
Note: some of the functionality of the file plugin is supported in the Web Client. Look here for more information
Table Row (tr)
Table Cell (td)
plugins.udp.*
Table Cell (td)
Operates client side
Table Cell (td)
Operates server side
Table Cell (td)

Table Row (tr)
Table Cell (td)
plugin.window
Table Cell (td)

Table Cell (td)

Table Cell (td)
Some functionality is supported in both clients and other functionality is only supported in one of the 2 clients. See the plugin's documentation here for more details
Table Row (tr)
Table Cell (td)
application.executeProgram(...)
Table Cell (td)
Operates client side
Table Cell (td)
Operates server side
Table Cell (td)

Table Row (tr)
Table Cell (td)
application.executeProgramInBackground(...)
Table Cell (td)
Operates client side
Table Cell (td)
Operates server side
Table Cell (td)

Table Row (tr)
Table Cell (td)
application.getPrinters(...)
Table Cell (td)
Operates client side
Table Cell (td)
Operates server side
Table Cell (td)

Table Row (tr)
Table Cell (td)
application.getOSName(...)
Table Cell (td)
Operates client side
Table Cell (td)
Operates server side
Table Cell (td)

Table Row (tr)
Table Cell (td)
application.getCurrentLookAndFeelName(...)
Table Cell (td)
returns applicable value
Table Cell (td)
Not applicable
Table Cell (td)

Table Row (tr)
Table Cell (td)
application.setUIProperty(...)
Table Cell (td)
Depends on the property
Table Cell (td)
Depends on the property
Table Cell (td)

Table Row (tr)
Table Cell (td)
application.updateUI(...)
Table Cell (td)

Table Cell (td)
The Web Client UI only gets updated after method execution and this is done automatically. Therefore, calling application.updateUI(...) will have no effect.
Table Cell (td)

Table Row (tr)
Table Cell (td)
controller.setPreferredPrinter(...)
Table Cell (td)
Operates client side
Table Cell (td)
Operates server side
Table Cell (td)

Table Row (tr)
Table Cell (td)
controller.showPrintPreview(...)
Table Cell (td)
Opens a form in print Preview mode in the client.
Table Cell (td)
Generates a PDF which is then streamed to the client.
Table Cell (td)

Table Row (tr)
Table Cell (td)
form: onHide
Table Cell (td)

Table Cell (td)
the onHide event of a form does NOT fire when the user browses to a new URL from within the browser (not triggered by code in the solution).
Table Cell (td)
Web Client behavior will most likely be brought inline with the Smart Client behavior in a future version of Servoy.
Table Row (tr)
Table Cell (td)
solution: onClose
Table Cell (td)

Table Cell (td)
the onClose event of a solution does NOT fire when the user browses to a new URL from within the browser (not triggered by code in the solution).
Table Cell (td)
Web Client behavior will most likely be brought inline with the Smart Client behavior in a future version of Servoy.
Table Row (tr)


Table Cell (td)

Default row selection highlight in Tableviews and portals

Table Cell (td)

 Present

Table Cell (td)

Not present

Table Cell (td)


Not supported
HTML Table
classservoy sSummery
Colgroup Tag
Column

Column

Table Row (tr)
styleheight: 30px;
Table Head (th)
What
Table Head (th)
Comment
Table Row (tr)
Table Cell (td)
Forms in Listview
Table Cell (td)
TableView and RecordView are supported in Servoy Web Client. Use Tableview instead.
Table Row (tr)
Table Cell (td)
Interactive (plain) JavaBeans
Table Cell (td)
Unless the bean is specifically designed to work in Servoy Web Client, only a snapshot JPEG image of the bean will be rendered in Web Client.
Table Row (tr)
Table Cell (td)
Client side integration with hardware on the client machine
Table Cell (td)
Not supported in browsers
Table Row (tr)
Table Cell (td)
Look and Feels
Table Cell (td)
Look and Feels are a Java concept. It is possible to edit the default Servoy Web Client style sheet.
Table Row (tr)
Table Cell (td)
application.setClipBoardString(...)
Table Cell (td)
Not supported in browsers
Table Row (tr)
Table Cell (td)
application.getClipBoardString(...)
Table Cell (td)
Not supported in browsers
Table Row (tr)
Table Cell (td)
application.getWindowX(...)
Table Cell (td)
Not supported in browsers
Table Row (tr)
Table Cell (td)
application.getWindowY(...)
Table Cell (td)
Not supported in browsers
Table Row (tr)
Table Cell (td)
application.getScreenWidth(...)
Table Cell (td)
Only initial value is available
Table Row (tr)
Table Cell (td)
application.getScreenHeight(...)
Table Cell (td)
Only initial value is available
Table Row (tr)
Table Cell (td)
application.setWindowLocation(...)
Table Cell (td)
Not supported in browsers
Table Row (tr)
Table Cell (td)
application.setWindowSize(...)
Table Cell (td)
Not supported in browsers
Table Row (tr)
Table Cell (td)
application.showFontChooser(...)
Table Cell (td)

Table Row (tr)
Table Cell (td)
application.showColorChooser(...)
Table Cell (td)

Table Row (tr)
Table Cell (td)
application.showI18Ndialog(...)
Table Cell (td)

Table Row (tr)
Table Cell (td)
application.showCalendar(...)
Table Cell (td)

Table Row (tr)
Table Cell (td)
application.setNumpadEnterAsFocusNextEnabled(...)
Table Cell (td)

Table Row (tr)
Table Cell (td)
application.setStatusText(...): tip parameter
Table Cell (td)
Browsers do not support the display a tooltip over the status bar
Table Row (tr)
Table Cell (td)
application.setToolbarVisible(...)
Table Cell (td)
No support in browsers to interact with browser toolbars from within a page
Table Row (tr)
Table Cell (td)
application.playSound(...)
Table Cell (td)

Table Row (tr)
Table Cell (td)
application.isLastPrintPreviewPrinted(...)
Table Cell (td)
Printing is handled by the browser; no support in browsers to determine if a print was actually done from within a page.
Table Row (tr)
Table Cell (td)
form: showInMenu property
Table Cell (td)
No support in browsers to interact with the browser menubar from within a page; to no window menu present in the Web Client.
Table Row (tr)
Table Cell (td)
form: bgRowColorCalc dataproviderName argument
Table Cell (td)
The dataproviderName is not sent into the bgRowColorCalc when running in Web Client.
Table Row (tr)
Table Cell (td)
controller.sortDialog(...)
Table Cell (td)

Table Row (tr)
Table Cell (td)
element: rollOverImageMedia property
Table Cell (td)

Table Row (tr)
Table Cell (td)
element: cursor property
Table Cell (td)
Web Client behavior will most likely be brought inline with Smart Client behavior in a future version of Servoy.
Table Row (tr)
Table Cell (td)
element: setScroll function
Table Cell (td)

Table Row (tr)
Table Cell (td)
element: rotation property
Table Cell (td)

Table Row (tr)
Table Cell (td)
plugins.agent.*
Table Cell (td)

Table Row (tr)
Table Cell (td)
plugins.excelxport.*
Table Cell (td)
No support in browsers to interact with the browser menubar from within a page.
Table Row (tr)
Table Cell (td)
plugins.textexport.*
Table Cell (td)
No support in browsers to interact with the browser menubar from within a page.
Table Row (tr)
Table Cell (td)
plugins.spellcheck.*
Table Cell (td)

Table Row (tr)
Table Cell (td)
Border property: titleBorder value
Table Cell (td)
Objects that have a border property will render with a lineBorder instead of a titleBorder in the Web Client.
Table Row (tr)
Table Cell (td)
Draw tools
Table Cell (td)
OVAL, ROUNDED_RECTANGLE and BORDER_PANEL will result in a normal RECTANGLE
Table Row (tr)
Table Cell (td)
RTF field
Table Cell (td)
No support in browsers for RTF formatted text
Table Row (tr)
Table Cell (td)
HTML in Comboboxes
Table Cell (td)
Not supported in browsers
Table Row (tr)
Table Cell (td)
Combobox: editable property: true value
Table Cell (td)
Not supported in browsers
Table Row (tr)
Table Cell (td)
HTMLArea: editable property: true value
Table Cell (td)

Table Row (tr)
Table Cell (td)
TabPanel: tabOrientation property: left/right/bottom values
Table Cell (td)

Table Row (tr)
Table Cell (td)
Tab: imageIcon property
Table Cell (td)

Table Row (tr)
Table Cell (td)
Portal: multiLine, intercellSpacing and showVerticalLines properties
Table Cell (td)