This panel allows you to prompt the user for data. What the user is prompted for is specified using an XML file which is included as a resource to the installer. Most of the panels that come with IzPack take user input in some form. In some panels this is through a simple user acknowledgment in others the user can enter text or select a directory through a file open dialog. In all of those cases the user input is used for the specific purpose needed by the panel that takes the input. However, if you need user input during installation that will later on be available to your application then you need to use the user input panel.
To use this panel, list it in the install file with the class name
UserInputPanel. In addition, you must write a XML specification and add it to the install resources. The name of this resource must be
<resources> <res id="userInputSpec.xml" src="user_input_spec.xml" parse="yes" type="xml"/> </resources> ... <panels> ... <panel classname="UserInputPanel" id="panel1"/> ... </panels>
A UserInputPanel can be highly dynamic from IzPack 4.3 on, as it will be refreshed every time the user input changes and will be rendered based on conditions. For instance, it would be possible to enable or disable some more options by clicking a checkbox.
Here's an example userInputSpec.xml (http://%7b%7bservername%7d%7d/sample-userInputSpec.html) showing 3 panels. There are some advanced features in this example, but the general flow should be looked at first.
The user input panel is a blank panel that can be populated with UI elements through a XML specification file. The specification supports text labels, input elements, explanatory text and some minor formatting options.
The following types of user input elements are supported:
Additionally visual elements can be added using the following types:
The way in which this panel conveys the user input to your application is through the variable substitution system. User input is not directly inserted into your configuration files but the variables that you specify for this panel are set in the variable substitution system. After this operation has taken place the variables and associated values are available for all substitutions made. This way of operation has a number of implications that you should be aware of.
First, not only can you set additional variables in this way but you can also modify variables that are defined elsewhere -even built in variables. For this reason you should be careful to avoid overlaps when choosing variable names. Although there might be cases when it seems useful to modify the value of other variables, it is generally not a good idea to do so. Because you might not exactly know when other variables are set and when and where they are used throughout the installation process, there might be unintended side effects.
Second, the panel must be shown at a point during the installation process before the variables are used. In most cases you will use the values to substitute variables in launch and configuration files that you supply with your installation. For this to work you place this panel before the install panel, because the install panel uses the variable substitutor to replace all such variables. Although using this panel any later in the process will correctly set the variables internally, there won't be any affect on the files written to disk. You can also use variables set in this way in other panels that you have written yourself. There is a section in the chapter on writing your own panel that explains how to do this. Also in this case it is important to place the associated input panel in the process before the variables are used.
At this point I would also like to mention that it is possible to hide every field element based on conditions.
It would also be possible to hide select elements on the panel or the panel altogether if certain packs are not selected. For this to work you must place this panel after the packs panel. One side effect of using this feature is that it is not possible to step back once the user input panel is displayed. This is because the user might make changes in the packs selection that would require a complete rebuild of the UI. Unfortunately, building the UI is an irreversible process, therefore the user can not be allowed to go back to the packs panel.
A UserInputPanel is defined in a separate descriptor file, referred to as resource "userInputSpec.xml" from the installation descriptor.
<userInput> <panel id="panel1"> <field .../> <field .../> ... </panel> ... </userInput>
The top level XML section is called
<userInput>. For most panels it does not make sense to present them more than once, however you might want to present multiple user input panels -with different content of course. Therefore the
<userInput> section can contain multiple tags that each specify the details for one panel instance.
The tag name for this is
<panel> tag uses the following attributes:
This is the id of the user input panel for which this specification should be used. This id links to the panel specification in the install.xml file.
Sets the alignment of fields used in the panelThere are three general layout rules this panel uses, they are
left, center, right default: left
Normally the user input is shown with a small border. To prevent this border set this attribute to
true, false default: true
This can be used to set the column width of the two column layout. This value is in percent of the whole size. If it is set to
0-100 percent default: 0
|no||Id of a string that represents what header name to display in the SummaryPanel of the UserInputPanel. This attribute must be defined if you would like to summarize the UserInputPanel. Note that you will have to add the summaryKey attribute to the fields you would like those to show up in the SummaryPanel as well.||String Value|
Enables to "grey out" all fields on a UserInputPanel not matching their specific condition.
Setting displayHidden attribute in the makes all fields within the panel be shown regardless of what the field's conditionid evaluates to. But if the conditionid of one ore more fields at the according panel evaluates to false, display the field just as disabled instead of hiding it.
|true, false default: false|
Each panel can have a number of visible elements, fields.
|no||If this tag is present the appropriate user input panel gets activated just if the mentioned pack is selected by the user in the PacksPanel.||Valid pack names, see PacksPanel.|
|no||If this tag is present the appropriate user input panel gets activated just if the mentioned pack is selected by the user in the PacksPanel .||Valid pack names, see PacksPanel.|
|no||Operating system-specific constraints.||Valid OS constraints, see OS Restrictions.|
To provide internationalization you can create a file named
xyz is the ISO3 code of the language in lowercase. Please be aware that case is significant. This file has to be inserted in the resources section of
install.xml with the
src attributes set at the name of the file.
If you have the following userInputSpec.xml and you want to internationalize
input.port for English and French you have to create two files named userInputLang.xml_eng and userInputLang.xml_fra:
<userInput> <panel id="panel1"> <field type="staticText" align="left" txt="My comment is here." id="input.comment"/> <field type="text" variable="proxyaddress"> <spec txt="Proxy Host:" id="input.proxy" size="25" set=""/> </field> <field type="text" variable="proxyPort"> <spec txt="Proxy Port:" id="input.port" size="6" set=""/> </field> </panel> </userInput>
<langpack> <str id="input.comment" txt="English:My comment is here."/> <str id="input.proxy" txt="English:Proxy Host:"/> <str id="input.port" txt="English:Proxy Port:"/> </langpack>
<langpack> <str id="input.comment" txt="French:My comment is here."/> <str id="input.proxy" txt="French:Proxy Host:"/> <str id="input.port" txt="French:Proxy Port:"/> </langpack>
you will also have to add the following to the install.xml file
<resources> ... <res id="userInputSpec.xml" src="userInputSpec.xml"/> <res id="userInputLang.xml_eng" src="userInputLang.xml_eng" /> <res id="userInputLang.xml_fra" src="userInputLang.xml_fra" /> ... </resources>