Zum Inhalt springen

Formularfeld per inline IF auf "required" setzen.

Erstellt am 17. März 2017 · Noch keine Antworten

Tags: Frage

Daviz ·

Ich möchte ein Textfeld nach einer IF-Abfrage ggf. auf "required" setzen. Das hier funktioniert leider nicht:

<f:form.textfield name="{fieldName -> f:format.urlencode()}" required="{f:if(then: '{fieldRequired}', else: '', condition: '{fieldRequired}')}" class="{f:if(then: '{fieldClass}', else: '', condition: '{fieldClass}')}" />

Obwohl es mit "class" funktionier, wird required immer gesetzt, egal ob "fieldRequired" TRUE oder FALSE ist. Das kommt wohl daher, dass das Required-Argument anders, als die anderen Argument, vom Typ "boolean" ist. Da reicht es, required="" zu schreiben, um das Feld auf required zu setzen.

Nun frage ich mich, ob ich mit einem Inline-IF zum Ziel kommen kann? Das funktioniert auch nicht, da wird das Textfield gar nicht generiert:

<f:form.textfield name="{fieldName -> f:format.urlencode()}" {f:if(then: 'required="required"', else: '', condition: '{fieldRequired}')}" class="{f:if(then: '{fieldClass}', else: '', condition: '{fieldClass}')}" />

Zur Zeit nutze ich diese Schreibweise, die das Template aber aufbläht:

<f:if condition="{data.required}">
    <f:then>
        <label><f:format.htmlspecialchars>{data.label}</f:format.htmlspecialchars> *Required</label>
        <f:form.textfield name="{fieldName -> f:format.urlencode()}" required="required" class="{f:if(then: '{fieldClass}', else: '', condition: '{fieldClass}')}" />
    </f:then>
    <f:else>
        <label><f:format.htmlspecialchars>{data.label}</f:format.htmlspecialchars></label>
        <f:form.textfield name="{fieldName -> f:format.urlencode()}" class="{f:if(then: '{wert.dependencyClass}', else: '', condition: '{wert.dependencyClass}')}" />
    </f:else>
</f:if>