[JAVA] So geben Sie das ID-Attribut in JSF an

--Umgebung - CentOS Linux release 7.8.2003 (Core) - Eclipse IDE for Enterprise Java Developers.Version: 2020-03 (4.15.0) - openjdk version "11.0.7" 2020-04-14 LTS - JSF 2.3.9

In JSF kann der ID-Attributwert als ein Wert ausgegeben werden, der sich von dem für xhtml verwendeten Wert unterscheidet. Das Buch beschrieb das Namensattribut, aber das ID-Attribut kann möglicherweise auch die Entsprechung mit dem Komponentenbaum verstehen.

FacesServlet generiert eine HTML-Datei aus dem Komponentenbaum und sendet sie an den Browser. Eine solche Transformation wird als Rendering bezeichnet. Auch nach dem Rendern in eine HTML-Datei werden die an die Backing Bean gebundenen HTML-Tags wie unten gezeigt mit dem Namensattribut eingebettet, damit Sie die Entsprechung zum internen Komponentenbaum sehen können. Nummer: \ \
Einführung in das leicht verständliche Java EE-Web-System-Hidewa-System

Problem 1: Das id-Attribut hat nicht den angegebenen Wert im h: form-Tag

Außerhalb des h: form-Tags ist der ID-Attributwert wie angegeben.

Wenn ** outOfForm ** für den ID-Attributwert von h: inputText angegeben ist

<h:inputText id="outOfForm" value="Außerhalb des Formular-Tags entspricht die ID den Angaben" />

Der ID-Attributwert von "input" ist ** outOfForm **.

Ausgabe


<input id="outOfForm" type="text" name="outOfForm" value="Außerhalb des Formular-Tags entspricht die ID den Angaben">

Innerhalb des h: form-Tags wird es zu "form tag id-Attributwert: angegebener id-Attributwert".

Wenn das ID-Attribut nicht im Tag h: form angegeben ist, wird es zu "automatischer Attributwert: angegebener ID-Attributwert".

Wenn Sie ** inOfForm ** für den ID-Attributwert von h: inputText angeben, ohne das ID-Attribut des h: form -Tags anzugeben

<h:form>
  <h:inputText id="inOfForm" value="h:Wenn das ID-Attribut nicht im Formular-Tag angegeben ist, wird "automatischer Attributwert" angezeigt.:Es wird "angegebener ID-Attributwert"" />
</h:form>

Der ID-Attributwert von input ist ** j_idt5: inOfForm **.

Ausgabe


<form id="j_idt5" name="j_idt5" method="post" action="/tryJsf/base.jsf" enctype="application/x-www-form-urlencoded">
  <input type="hidden" name="j_idt5" value="j_idt5">
  <input id="j_idt5:inOfForm" type="text" name="j_idt5:inOfForm" value="h:Wenn das ID-Attribut nicht im Formular-Tag angegeben ist, wird "automatischer Attributwert" angezeigt.:Es wird "angegebener ID-Attributwert"">
  <input type="hidden" name="javax.faces.ViewState" id="j_id1:javax.faces.ViewState:0" value="-6757148234097573315:8183558224686661226" autocomplete="off">
</form>

Wenn das ID-Attribut im Tag h: form angegeben ist, wird es zu "ID-Attributwert des Formular-Tags: angegebener ID-Attributwert".

Wenn Sie ** formId ** für den ID-Attributwert des Tags "h: form" und ** inOfForm ** für den ID-Attributwert von "h: inputText" angeben

<h:form id="formId">
  <h:inputText id="inOfForm" value="h:Wenn Sie das ID-Attribut im Formular-Tag angeben, "ID-Attributwert des Formular-Tags":Es wird "angegebener ID-Attributwert"" />
</h:form>

Der ID-Attributwert von input ist ** formId: inOfForm **.

Ausgabe


<form id="formId" name="formId" method="post" action="/tryJsf/base.jsf" enctype="application/x-www-form-urlencoded">
  <input type="hidden" name="formId" value="formId">
  <input id="formId:inOfForm" type="text" name="formId:inOfForm" value="h:Wenn Sie das ID-Attribut im Formular-Tag angeben, "ID-Attributwert des Formular-Tags":Es wird "angegebener ID-Attributwert"">
  <input type="hidden" name="javax.faces.ViewState" id="j_id1:javax.faces.ViewState:0" value="1982632179815695771:1244710352148896782" autocomplete="off">
</form>

Lösung 1: Wenn Sie prepareId = "false" im Tag h: form angeben, wird der ID-Attributwert zum angegebenen Wert.

prependId Flag indicating whether or not this form should prepend its id to its descendent's id during the clientId generation process. If this flag is not set, the default value is true. JSF 2.2 View Declaration Language: Facelets Variant

(Grobe Übersetzung) Ein Flag, das angibt, ob der ID des Formulars während der ID-Generierung die ID seiner Nachkommen vorangestellt wird. Der Standardwert ist true. Wenn Sie ** formId ** für den ID-Attributwert des Tags "h: form" und ** inOfForm ** für den ID-Attributwert von "h: inputText" angeben

<h:form id="formId" prependId="false">
  <h:inputText id="inOfForm" value="h:prependId im Formular-Tag=Wenn false angegeben wird, ist das ID-Attribut der angegebene Wert." />
</h:form>

Der ID-Attributwert von input ist ** inOfForm **.

Ausgabe


<form id="formId" name="formId" method="post" action="/tryJsf/base.jsf" enctype="application/x-www-form-urlencoded">
  <input type="hidden" name="formId" value="formId">
  <input id="inOfForm" type="text" name="inOfForm" value="h:prependId im Formular-Tag=Wenn false angegeben wird, ist das ID-Attribut der angegebene Wert.">
  <input type="hidden" name="javax.faces.ViewState" id="j_id1:javax.faces.ViewState:0" value="-3193809963809428842:-8198161006116065679" autocomplete="off">
</form>

Problem 2: Der ID-Attributwert wird nicht zum angegebenen Wert im Tag ui: repeat

Sowohl außerhalb als auch innerhalb des h: form-Tags lautet "automatischer Attributwert: Indexnummer: angegebener ID-Attributwert".

Wenn ** inOfRepeat ** für den ID-Attributwert von h: inputText angegeben ist

<ui:repeat var="item" varStatus="stat" value="#{idBean.array}">
  <h:inputText id="inOfRepeat#{stat.index}" value="h:Innerhalb des Formular-Tags ui:Wenn Sie das Wiederholungs-Tag verwenden, entspricht der ID-Attributwert nicht dem angegebenen Wert" />
</ui:repeat>

Der ID-Attributwert von input ist ** j_idt5: {Indexnummer}: inOfRepeat **.

Ausgabe


<input id="j_idt5:0:inOfRepeat" type="text" name="j_idt5:0:inOfRepeat">
<input id="j_idt5:1:inOfRepeat" type="text" name="j_idt5:1:inOfRepeat">

Wenn das ID-Attribut nicht im Tag h: form angegeben ist, wird es zu "automatischer Attributwert: automatischer Attributwert: Indexnummer: angegebener ID-Attributwert".

Wenn Sie ** inOfRepeat {Indexnummer} ** für den ID-Attributwert von h: inputText angeben, ohne das ID-Attribut des h: form -Tags anzugeben

<h:form>
  <ui:repeat var="item" varStatus="stat" value="#{idBean.array}">
    <h:inputText id="inOfRepeat#{stat.index}" value="h:Innerhalb des Formular-Tags ui:Wenn Sie das Wiederholungs-Tag verwenden, entspricht der ID-Attributwert nicht dem angegebenen Wert" />
  </ui:repeat>
</h:form>

Der ID-Attributwert von input ist ** j_idt5: j_idt9: {Indexnummer}: inOfRepeat **.

Ausgabe


<form id="j_idt5" name="j_idt5" method="post" action="/tryJsf/base.jsf" enctype="application/x-www-form-urlencoded">
  <input type="hidden" name="j_idt5" value="j_idt5">
  <input id="j_idt5:j_idt9:0:inOfRepeat" type="text" name="j_idt5:j_idt9:0:inOfRepeat">
  <input id="j_idt5:j_idt9:1:inOfRepeat" type="text" name="j_idt5:j_idt9:1:inOfRepeat">
  <input type="hidden" name="javax.faces.ViewState" id="j_id1:javax.faces.ViewState:0" value="8291831575234858658:4144786523139149206" autocomplete="off">
</form>

Wenn das ID-Attribut im Tag h: form angegeben ist, wird es zu "ID-Attributwert des Formular-Tags: automatischer Attributwert: Indexnummer: angegebener ID-Attributwert".

Wenn Sie ** formId ** für den ID-Attributwert des Tags "h: form" und ** inOfRepeat {Indexnummer} ** für den ID-Attributwert von "h: inputText" angeben

<h:form id="formId">
  <ui:repeat var="item" varStatus="stat" value="#{idBean.array}">
    <h:inputText id="inOfRepeat#{stat.index}" value="h:Innerhalb des Formular-Tags ui:Wenn Sie das Wiederholungs-Tag verwenden, entspricht der ID-Attributwert nicht dem angegebenen Wert" />
  </ui:repeat>
</h:form>

Der ID-Attributwert von input ist ** formId: j_idt9: {Indexnummer}: inOfRepeat **.

Ausgabe


<form id="formId" name="formId" method="post" action="/tryJsf/base.jsf" enctype="application/x-www-form-urlencoded">
  <input type="hidden" name="formId" value="formId">
  <input id="formId:j_idt9:0:inOfRepeat" type="text" name="formId:j_idt9:0:inOfRepeat">
  <input id="formId:j_idt9:1:inOfRepeat" type="text" name="formId:j_idt9:1:inOfRepeat">
  <input type="hidden" name="javax.faces.ViewState" id="j_id1:javax.faces.ViewState:0" value="-9123594053057548780:-7376239985257011779" autocomplete="off">
</form>

Selbst wenn prepareId = "false" im Tag h: form angegeben ist, wird der ID-Attributwert nicht zum angegebenen Wert.

Auch wenn Sie im Tag "h: form" "prependId =" false "" angeben

<h:form id="formId" prependId="false">
  <ui:repeat var="item" varStatus="stat" value="#{idBean.array}">
    <h:inputText id="inOfRepeat#{stat.index}" value="h:Innerhalb des Formular-Tags ui:Wenn Sie das Wiederholungs-Tag verwenden, entspricht der ID-Attributwert nicht dem angegebenen Wert" />
  </ui:repeat>
</h:form>

Der ID-Attributwert des form -Tags bleibt einfach nicht erhalten.

Ausgabe


<form id="formId" name="formId" method="post" action="/tryJsf/base.jsf" enctype="application/x-www-form-urlencoded">
  <input type="hidden" name="formId" value="formId">
  <input id="j_idt9:0:inOfRepeat" type="text" name="j_idt9:0:inOfRepeat">
  <input id="j_idt9:1:inOfRepeat" type="text" name="j_idt9:1:inOfRepeat">
  <input type="hidden" name="javax.faces.ViewState" id="j_id1:javax.faces.ViewState:0" value="-915378070197893309:-5208595187307997788" autocomplete="off">
</form>

Lösung 1: Stoppen Sie das jsf-Tag und schreiben Sie mit dem HTML-Tag

Hinweis: Es wäre eine Schande, wenn Sie den Wert des ID-Attributs nicht so schreiben, dass er eindeutig ist. Es ist eine sehr heikle Maßnahme. Wenn ** inOfRepeat {Indexnummer} ** für den ID-Attributwert von input angegeben ist

<h:form id="formId">
  <ui:repeat var="item" varStatus="stat" value="#{idBean.array}">
    <input tyep="text" id="inOfRepeat#{stat.index}" value="h:Innerhalb des Formular-Tags ui:Wenn Sie das Wiederholungs-Tag verwenden, entspricht der ID-Attributwert nicht dem angegebenen Wert" />
  </ui:repeat>
</h:form>

Der ID-Attributwert von input ist ** inOfRepeat {Indexnummer} **. Da es sich nicht um eine JSF-Welt handelt, wirkt sich der ID-Attributwert des Tags "h: form" nicht aus, selbst wenn kein "prepareId =" false "vorhanden ist.

Ausgabe


<form id="formId" name="formId" method="post" action="/tryJsf/base.jsf" enctype="application/x-www-form-urlencoded">
  <input type="hidden" name="formId" value="formId">
  <input tyep="text" id="inOfRepeat0" value="h:Innerhalb des Formular-Tags ui:Wenn Sie das Wiederholungs-Tag verwenden, entspricht der ID-Attributwert nicht dem angegebenen Wert">
  <input tyep="text" id="inOfRepeat1" value="h:Innerhalb des Formular-Tags ui:Wenn Sie das Wiederholungs-Tag verwenden, entspricht der ID-Attributwert nicht dem angegebenen Wert">
  <input type="hidden" name="javax.faces.ViewState" id="j_id1:javax.faces.ViewState:0" value="-3641841499499477715:2017944983286472561" autocomplete="off">
</form>

Lösung 2: Stoppen Sie das Tag ui: repeat und verwenden Sie das Tag c: forEach

Hinweis: Es wäre eine Schande, wenn Sie den Wert des ID-Attributs nicht so schreiben, dass er eindeutig ist. Da das JSTL Core-Tag (c :) ein von JSP geerbtes Tag ist, ist es nicht JSF-ähnlich?

Wenn Sie ** formId ** für den ID-Attributwert des Tags "h: form" und ** inOfRepeat {Indexnummer} ** für den ID-Attributwert von "h: inputText" angeben

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
  xmlns:h="http://xmlns.jcp.org/jsf/html"
  xmlns:f="http://xmlns.jcp.org/jsf/core"
  xmlns:c="http://java.sun.com/jsp/jstl/core"> <!--<<<Nachtrag-->
<h:form id="formId">
  <c:forEach var="item" varStatus="stat" items="#{idBean.array}">
   <h:inputText id="inOfRepeat#{stat.index}" value="h:Innerhalb des Formular-Tags ui:Wenn Sie das Wiederholungs-Tag verwenden, entspricht der ID-Attributwert nicht dem angegebenen Wert"/>
  </c:forEach>
</h:form>

Der ID-Attributwert von input ist ** formId: inOfRepeat {Indexnummer} **.

Ausgabe


<form id="formId" name="formId" method="post" action="/tryJsf/base.jsf" enctype="application/x-www-form-urlencoded">
  <input type="hidden" name="formId" value="formId">
  <input id="formId:inOfRepeat0" type="text" name="formId:inOfRepeat0" value="h:Innerhalb des Formular-Tags ui:Wenn Sie das Wiederholungs-Tag verwenden, entspricht der ID-Attributwert nicht dem angegebenen Wert">
  <input id="formId:inOfRepeat1" type="text" name="formId:inOfRepeat1" value="h:Innerhalb des Formular-Tags ui:Wenn Sie das Wiederholungs-Tag verwenden, entspricht der ID-Attributwert nicht dem angegebenen Wert">
  <input type="hidden" name="javax.faces.ViewState" id="j_id1:javax.faces.ViewState:0" value="7276136016284590450:-4018393601695065919" autocomplete="off">
</form>

Wenn Sie den ID-Attributwert des Tags "h: form" nicht anhängen möchten, geben Sie "prepareId =" false "an.

<h:form id="formId" prependId="false">
...Das Gleiche wie vorher...

Ausgabe


<form id="formId" name="formId" method="post" action="/tryJsf/base.jsf" enctype="application/x-www-form-urlencoded">
  <input type="hidden" name="formId" value="formId">
  <input id="inOfRepeat0" type="text" name="inOfRepeat0" value="h:Innerhalb des Formular-Tags ui:Wenn Sie das Wiederholungs-Tag verwenden, entspricht der ID-Attributwert nicht dem angegebenen Wert">
  <input id="inOfRepeat1" type="text" name="inOfRepeat1" value="h:Innerhalb des Formular-Tags ui:Wenn Sie das Wiederholungs-Tag verwenden, entspricht der ID-Attributwert nicht dem angegebenen Wert">
  <input type="hidden" name="javax.faces.ViewState" id="j_id1:javax.faces.ViewState:0" value="-4294574413761401134:-7748270303136609237" autocomplete="off">
</form>

Recommended Posts

So geben Sie das ID-Attribut in JSF an
So geben Sie den Ressourcenpfad beim HTML-Import an
So überprüfen Sie die JSF-Version
So legen Sie mit JAXB Zeichencode und Zeilenvorschubcode fest
Wie man Lombok im Frühling benutzt
So finden Sie May'n in XPath
So blenden Sie die Bildlaufleiste in WebView aus
So führen Sie JUnit in Eclipse aus
Wie man in Ruby auf unbestimmte Zeit iteriert
Wie man die Programmierung in 3 Monaten beherrscht
So erhalten Sie Parameter in Spark
Verwendung von InjectorHolder in OpenAM
So installieren Sie jQuery in Rails 6
So benennen Sie Variablen in Java
So setzen Sie Lombok in Eclipse
So verketten Sie Zeichenfolgen mit Java
So installieren Sie Swiper in Rails
So erhalten Sie die ID des automatisch inkrementierten PRIMAY-Schlüssels in MyBatis
So geben Sie eine Liste von Zeichenfolgen in JSF als durch Kommas getrennte Zeichenfolgen aus
So implementieren Sie Suchfunktionen in Rails
So implementieren Sie die Datumsberechnung in Java
So implementieren Sie den Kalman-Filter mit Java
Mehrsprachige Unterstützung für Java Verwendung des Gebietsschemas
So ändern Sie den App-Namen in Rails
Verwendung des benannten Volumes in docker-compose.yml
So filtern Sie den JUnit-Test in Gradle
So fügen Sie ein Video in Rails ein
So standardisieren Sie die Kopfzeile in Thymeleaf
Wie kann ich Spring Tool in Eclipse 4.6.3 einbinden?
So fügen Sie eine JAR-Datei in ScalaIDE hinzu
So führen Sie eine Basiskonvertierung in Java durch
Wie man Parameter in der link_to-Methode hat
Verwendung von Docker in VSCode DevContainer
Verwendung von MySQL im Rails-Tutorial
So beheben Sie das Systemdatum in JUnit
So erzwingen Sie Codierungskonventionen in Java
Einbetten von Janus Graph in Java
[Rails] So konfigurieren Sie das Routing in Ressourcen
So implementieren Sie Ranking-Funktionen in Rails
So implementieren Sie die asynchrone Verarbeitung in Outsystems
Verstehe in 5 Minuten !! Wie man Docker benutzt
So überschreiben Sie Firebase-Daten mit Swift
Verwendung von credentials.yml.enc aus Rails 5.2
So montieren Sie JSON direkt in Jackson
[Für Anfänger] So debuggen Sie mit Eclipse
Fügen Sie dem Cookie in Java das SameSite-Attribut hinzu
Verwendung von ExpandableListView in Android Studio
So zeigen Sie Fehlermeldungen auf Japanisch an
Zusammenfassung der Auswahl von Elementen in Selen
So erhalten Sie Keycloak-Anmeldeinformationen in der Interceptor-Klasse
[Java FX] So schreiben Sie Eclipse-Berechtigungen in build.gradle
So überprüfen Sie das Protokoll im Docker-Container