PoNG Module: Form View
This PoNG module creates an input form with button(s) to post data to backend services.
Please have a look at the other standard modules coming with PoNG.
Inhaltsverzeichnis
Usage in "structure"
Simply "type": "pong-form"
to the rows
or cols
resource. Example structure file extract:
{ "layout": { ... "rows": [ { "rowId": "bla", "resourceURL": "customer", "type": "pong-form", ... }, ... ], ... }
Form Definition
The resource will load the form definition from the URL ../svc/<resourceUrl>/pong-form
Two column form layout
An easy one or two column layout (formFields2 is optional) is available. Example JSON definition from ../svc/customer/pong-form
{ "label": "Customers", "description": "Create or edit a customer data record", "id": "cloudFormId", "formFields1": [ { "id":"name", "label":"Name", "type":"text" }, { "id":"email", "label":"E-Mail" }, { "id":"phone", "label":"Phone" } ], "formFields2": [ { "id":"company", "label":"Company" }, { "id":"address", "label":"Address" } ], "actions" : [ { "id":"CustomerLoad", "actionName": "Load Customer", "method":"GET" ,"actionURL": "svc/customer", "target": "customerActionOut" }, { "id":"CustomerCreate", "actionName": "Create Customer", "method":"POST", "actionURL": "svc/customer", "update": [ { "resId":"customerTbl" } ] }, { "id":"CustomerDelete", "actionName": "Delete Customer", "method":"DELETE", "actionURL": "svc/customer", "target": "customerActionOut" } ] }
Groups and columns form layout
You can do a more flexible form set up by arranging groups and columns, but you can't mix the 2-column and the flexible form layout:
{ "label": "Customers", "description": "Create or edit a customer data record", "id": "cloudFormId", "fieldGroups":[ { "fieldset":"name", "columns":[ { "fieldset":"name", "formFields":[ { ... field def ... } { ... field def ... } ] } ] } ], "actions" : [ ... ] }
The fieldset
is optional and will render a fieldset (border) for this section and the name in the legend.
Field Types
The idea is to have a two column form.
For all fields "hidden":"true"
is supported.
Text
"type:"text"
(default)
defaultVal
: property for presetting a value is supported.
If "rows":"number"
property is set, then a textarea is rendered.
TODO PONG-72: readonly
: true, false of checkbox field
Password
"type:"password"
Select
"type:"select"
Static options: options
array, e.g. "options": [ { "option":"ABC" }, { "option":"XYZ" } ]
Dynamic options: optionsResource
, e.g. "optionsResource": { "resourceURL":"myObjType", "optionField":"name", "optionValue":"id" }
Warning: The dynamic options will perform a blocking call. If there fails something, it will block the browser.
Checkbox
"type:"checkbox"
You should specify "name":"..."
attribute, so the values can be collected for that name. If no name given, the id is a stand alone comitting field.
You're able to preselect a checkbox by defining "defaultVal":"true"
.
For checkboxes you can also set "readonly":"true"
.
Example
"formFields":[ { "id":"c0", "type":"checkbox", "name":"extras", "value":"ac-adapter", "label":"include AC adapter" , defaultVal":"true" }, { "id":"c1", "type":"checkbox", "name":"extras", "value":"colordisplay", "label":"with color display" }, { "id":"c2", "type":"checkbox" "name":"extras", "value":"double", "label":"double size" } ]
"type:"checkboxList"
You can load checkbox inputs from a resource per HTTP GET:
"formFields":[ { "id":"c0", "type":"checkboxList", "name":"extras", "resourceURL":"myresource", "valueField":"id", "labelField":"name" , "defaultValField":"default" } ]
Separator
"type:"separator"
adds a horizontal line instead of a field
Text in Form
"type:"label"
adds the text in label as a simple text w/o any form related things, good for hints or explanationsdescr
field adds a tool tip to the field.
Form Actions
"action"
-Array:
- Action
method
is optional, default is"method":"POST"
- Action
target
has three options:- give the resource id of the module, where the output has to go to
- special value "modal", to display an alert box with the result
target
is optional, you can also ignore the response.
- Action
update
is an (optional) array of resource (column/row) ids, where data updates should be triggered. Example:"update": [ { "resId":"xyz" } ] }
OnChange
A special action is the on-change-action "onChange":"*"
. The * means, it listen to changes on all fields. You may limit the event-action to dedicated field IDs (comma separated). Multiple action specification with different on-change definitions are allowed.
No button is generated, but a JS to handle changes in the form. The main use case is to ask a backend service e.g. for a price quote and update another resource to display the result.
Example
{ "label": "Product Configuration", ... "actions" : [ ... { "id":"OnChng", "onChange":"*", "actionURL":"svc/product/calcQuote/", "target":"quote" } ] }
Improvement TODO: Default delay is 1 sec to wait for an other change before calling the backend, but you can use "onChangeDelay":"3"
to set it (to 3 sec in this example).
Simple example
This is the result of the 2-column layout definition above:
CSS
You can use the following CCS elements to modify thy styles:
- TODO