Component for Bootstrap form group with input of type number

Former-commit-id: 4a28e8f23a
pull/7/head
Jens Pelzetter 2020-11-18 19:42:41 +01:00
parent 9cbb19cada
commit 0a5f82e6f1
4 changed files with 108 additions and 53 deletions

View File

@ -1,33 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
xmlns:cc="http://xmlns.jcp.org/jsf/composite"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<cc:interface shortDescription="A base component for form groups. The control (input) is added by the input facet.">
<cc:attribute name="help"
required="true"
shortDescription="A short description of the input field"
type="String" />
<cc:attribute name="inputId"
required="true"
shortDescription="The ID of the input field."
type="String" />
<cc:attribute name="label"
required="true"
shortDescription="The label of the input field."
type="String" />
<cc:facet name="input" required="true" />
</cc:interface>
<cc:implementation>
<div class="form-group">
<label for="#{cc.attrs.inputId}">${cc.attrs.label}</label>
<cc:renderFacet name="input" />
<small class="form-text text-muted"
id="#{cc.attrs.inputId}-help">
#{cc.attrs.help}
</small>
</div>
</cc:implementation>
</html>

View File

@ -0,0 +1,80 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:bootstrap="http://xmlns.jcp.org/jsf/composite/components/bootstrap"
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
xmlns:cc="http://xmlns.jcp.org/jsf/composite"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<cc:interface shortDescription="Component for a form group with a number input">
<cc:attribute name="help"
required="true"
shortDescription="A short description of the input field"
type="String" />
<cc:attribute name="inputId"
required="true"
shortDescription="The ID of the input field."
type="String" />
<cc:attribute name="label"
required="true"
shortDescription="The label of the input field."
type="String" />
<cc:attribute name="max"
required="false"
shortDescription="Maximum allowed value."
type="String" />
<cc:attribute name="min"
required="false"
shortDescription="Minimum allowed value."
type="String" />
<cc:attribute name="name"
required="true"
shortDescription="The name of the input field. This is also the name which is used to send the value of the input to the server."
type="String" />
<cc:attribute name="placeholder"
required="false"
shortDescription="A placeholder to show in the empty field."
type="String" />
<cc:attribute default="false"
name="required"
shortDescription="Is the field required?"
required="false"
type="boolean" />
<cc:attribute name="step"
required="false"
shortDescription="Stepping interval for the input"
type="String" />
<cc:attribute name="value"
required="false"
shortDescription="Value of the input field"
type="String" />
</cc:interface>
<cc:implementation>
<pre>
step = #{cc.attrs.step}
step = #{(not empty cc.attrs.step) ? cc.attrs.step : null}
step not empty? #{not empty cc.attrs.step}
</pre>
<div>
<div class="form-group">
<label for="#{cc.attrs.inputId}">${cc.attrs.label}</label>
<!--<cc:renderFacet name="input" />-->
<input aria-describedby="#{cc.attrs.inputId}-help"
data-step="#{cc.attrs.step}"
id="#{cc.attrs.inputId}"
max="#{not empty cc.attrs.max ? cc.attrs.max : null}"
min="#{not empty cc.attrs.min ? cc.attrs.min : null}"
name="#{cc.attrs.name}"
placeholder="#{not empty cc.attrs.placeholder ? cc.attrs.placeholder : null}"
required="#{cc.attrs.required ? 'required' : null}"
step="#{cc.attrs.step}"
type="number"
value="#{not empty cc.attrs.value ? cc.attrs.value : null}" />
<small class="form-text text-muted"
id="#{cc.attrs.inputId}-help">
#{cc.attrs.help}
</small>
</div>
</div>
</cc:implementation>
</html>

View File

@ -1,6 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html xmlns:bootstrap="http://xmlns.jcp.org/jsf/composite/components/bootstrap" <html xmlns="http://www.w3.org/1999/xhtml"
xmlns="http://www.w3.org/1999/xhtml" xmlns:bootstrap="http://xmlns.jcp.org/jsf/composite/components/bootstrap"
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core" xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
xmlns:cc="http://xmlns.jcp.org/jsf/composite" xmlns:cc="http://xmlns.jcp.org/jsf/composite"
xmlns:f="http://xmlns.jcp.org/jsf/core"> xmlns:f="http://xmlns.jcp.org/jsf/core">
@ -53,10 +53,8 @@
type="String" /> type="String" />
</cc:interface> </cc:interface>
<cc:implementation> <cc:implementation>
<bootstrap:formGroup help="#{cc.attrs.help}" <div class="form-group">
inputId="#{cc.attrs.inputId}" <label for="#{cc.attrs.inputId}">${cc.attrs.label}</label>
label="#{cc.attrs.label}">
<f:facet name="input">
<input aria-describedby="#{cc.attrs.inputId}-help" <input aria-describedby="#{cc.attrs.inputId}-help"
id="#{cc.attrs.inputId}" id="#{cc.attrs.inputId}"
maxlength="#{(not empty cc.attrs.maxlength) ? cc.attrs.maxlength : null}" maxlength="#{(not empty cc.attrs.maxlength) ? cc.attrs.maxlength : null}"
@ -64,12 +62,15 @@
name="#{cc.attrs.name}" name="#{cc.attrs.name}"
pattern="#{not empty cc.attrs.pattern ? cc.attrs.pattern : null}" pattern="#{not empty cc.attrs.pattern ? cc.attrs.pattern : null}"
placeholder="#{not empty cc.attrs.placeholder ? cc.attrs.placeholder: null}" placeholder="#{not empty cc.attrs.placeholder ? cc.attrs.placeholder: null}"
required="#{cc.attrs.required ? 'required' : ''}" required="#{cc.attrs.required ? 'required' : null}"
size="#{not empty cc.attrs.size ? cc.attrs.size : null}" size="#{not empty cc.attrs.size ? cc.attrs.size : null}"
value="#{not empty cc.attrs.value ? cc.attrs.value : ''}" type="text"
type="text" /> value="#{not empty cc.attrs.value ? cc.attrs.value : ''}" />
</f:facet> <small class="form-text text-muted"
</bootstrap:formGroup> id="#{cc.attrs.inputId}-help">
#{cc.attrs.help}
</small>
</div>
</cc:implementation> </cc:implementation>
</html> </html>

View File

@ -23,7 +23,14 @@
<bootstrap:formGroupText help="test" <bootstrap:formGroupText help="test"
inputId="test" inputId="test"
label="Test" label="Test"
name="test" /> name="test"
value="foobar bar" />
<bootstrap:formGroupNumber help="The price"
inputId="price"
label="Price"
name="price"
step="0.01"
value="10.0" />
</form> </form>
<p>ToDo</p> <p>ToDo</p>
</div> </div>