[izpack-devel] Dynamic controls&validation in UserInputPanel
Dennis Reil
Dennis.Reil at reddot.de
Tue Mar 13 17:25:44 CET 2007
Hi Vladimir,
Great idea!
regards,
Dennis
Am Dienstag, den 13.03.2007, 18:16 +0200 schrieb Vladimir Ralev:
> Now that we have conditions and the different fields can be displayed
> conditionally with some rules assigned to them, I think it will be a
> good addition to make these a bit more dynamic. In other words - make
> the UIP GUI to be completely redrawn and revalidated on certain events
> (like clicking on a checkbox or radio, others are possible too).
>
> For example let's say you have a Normal/Advanced radio selector in your
> UIP and you want additional controls to be displayed for advanced users,
> but not to be shown for users who selected the "Normal" option. Another
> example is server security (this is what need here at JBoss). The user
> has to choose:
> 1. Enable local administration only (no authentication)
> 2. Enable remote administration (password authentication)
>
> When the users clicks on remote admin he gets user/pass input fields,
> otherwise nothig additional and all this in a single panel without
> clicking next and going back and forth.
>
>
> The implementation:
> ---------------------
>
> I added an attribute for radio and checkbox fields called "revalidate".
> If you set revalidave="yes" for a radio of checkbox the whole Panel is
> being recreated with updated variables.
>
> <!-- Standard/Advanced configuration panel -->
> <panel order="0">
> <field type="radio" variable="installConfig">
> <description align="left" txt="Select Standard installation or
> select Advanced to make changes"
> id="installConfig.text"/>
> <spec>
> <choice txt="Standard" revalidate="yes"
> id="installConfig.radio.standard" value="standard" set="true"/>
> <choice txt="Advance" revalidate="yes"
> id="installConfig.radio.advanced" value="advanced" />
> </spec>
> </field>
> <field type="divider" align="center"/>
> <field type="staticText" conditionid="advanced" align="left"
> id="installConfig.note"
> txt="This text is only displayed if advanced if checked" />
> </panel>
>
> You can see that installConfig.note is rendered only when condition
> "advanced" is satisfied. Condition advanced is defined like this:
>
> <condition type="variable" id="advanced">
> <name>installConfig</name>
> <value>advanced</value>
> </condition>
>
> This condition is checking whether installConfig (the radio) is in
> advanced mode. Note that installConfig.radio.standard and
> installConfig.radio.advanced cause revalidation, so the note is updated
> whenever the user clicks on one of them.
>
> Performance:
> --------------
> There is no noticeable slowdown for up to about 10 conditionid-enabled
> controls on my machine. Have in mind that if you radios or checkboxes do
> not have revalidate="yes" there is no performance loss at all.
>
> One more hack:
> ----------------
> The UIPs are using a TwoColumnLayout with hardcoded topBuffer=25%. With
> the dynamic panel updates the height of you panel varies as components
> are removed or added on the fly, and thus moved up and down with each
> revalidation. That's why I added an attribute topBuffer to the panel tag
> in userInputSpec.xml. If you set topBuffer=0% the panel always appears
> at the topmost available place and stays there no matter the height. If
> you omit the topBuffer, the default value is 25 as before.
> <!-- Standard/Advanced configuration panel -->
> <panel order="0" topBuffer="0">
> <field type="title" align="right"
> txt="Standard - Advanced Option" bold="true" size="2"
> id="installConfigName"
> icon="/images/search.png"
> />
> <field type="radio" variable="installConfig">
> <description align="left" txt="Select Standard installation or
> select Advanced to make changes"
> id="installConfig.text"/>
> <spec>
> <choice txt="Standard" revalidate="yes"
> id="installConfig.radio.standard" value="standard" set="true"/>
> <choice txt="Advance" revalidate="yes"
> id="installConfig.radio.advanced" value="advanced" />
> </spec>
> </field>
> <field type="divider" align="center"/>
> <field type="staticText" conditionid="standard-advanced"
> align="left" id="installConfig.note"
> txt="Note: Selecting Advanced option allows you to chnage
> various configurations like DataSource, Security, Isolation and Call by
> Value Semantics etc" />
> </panel>
>
> You can use spaces to make some static gap if you want to have similar
> effects.
>
>
> If you approve this feature I will commit it to the trunk or the 3.10.1
> branch (it's just 20 lines of code)?
> _______________________________________________
> izpack-devel mailing list
> izpack-devel at lists.berlios.de
> https://lists.berlios.de/mailman/listinfo/izpack-devel
--
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://lists.berlios.de/pipermail/izpack-devel/attachments/20070313/92d9b23e/attachment.html
More information about the izpack-devel
mailing list