[JAVA] Comment spécifier l'attribut id dans JSF

--Environnement - 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

Dans JSF, la valeur d'attribut id peut être sortie sous la forme d'une valeur différente de la valeur utilisée pour xhtml. Le livre décrit l'attribut name, mais l'attribut id peut également être capable de comprendre la correspondance avec l'arbre des composants.

FacesServlet génère un fichier HTML à partir de l'arborescence des composants et l'envoie au navigateur. Une telle transformation est appelée rendu. Même après le rendu dans un fichier HTML, les balises HTML liées au backing bean sont intégrées avec l'attribut name comme indiqué ci-dessous afin que vous puissiez voir la correspondance avec l'arborescence des composants internes. Numéro: \ \
Introduction au système Web Java EE facile à comprendre - Hidewa System

Problème 1: l'attribut id n'a pas la valeur spécifiée dans la balise h: form

En dehors de la balise h: form, la valeur de l'attribut id est celle spécifiée.

Si ** outOfForm ** est spécifié pour la valeur d'attribut id de h: inputText

<h:inputText id="outOfForm" value="En dehors de la balise de formulaire, l'ID sera tel que spécifié" />

La valeur de l'attribut id de ʻinput` est ** outOfForm **.

production


<input id="outOfForm" type="text" name="outOfForm" value="En dehors de la balise de formulaire, l'ID sera tel que spécifié">

À l'intérieur de la balise h: form, il devient "valeur d'attribut id de balise de formulaire: valeur d'attribut id spécifié"

Si l'attribut id n'est pas spécifié dans la balise h: form, il devient "valeur d'attribut automatique: valeur d'attribut id spécifié".

Si vous spécifiez ** inOfForm ** pour la valeur d'attribut id de h: inputText sans spécifier l'attribut id de la balise h: form

<h:form>
  <h:inputText id="inOfForm" value="h:Si l'attribut id n'est pas spécifié dans la balise de formulaire, "valeur d'attribut automatique":Il devient "valeur d'attribut d'ID spécifié"" />
</h:form>

La valeur d'attribut id de ʻinput` est ** j_idt5: inOfForm **.

production


<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:Si l'attribut id n'est pas spécifié dans la balise de formulaire, "valeur d'attribut automatique":Il devient "valeur d'attribut d'ID spécifié"">
  <input type="hidden" name="javax.faces.ViewState" id="j_id1:javax.faces.ViewState:0" value="-6757148234097573315:8183558224686661226" autocomplete="off">
</form>

Si l'attribut id est spécifié dans la balise h: form, il devient "valeur d'attribut id de la balise form: valeur d'attribut id spécifiée".

Si vous spécifiez ** formId ** pour la valeur d'attribut id de la balise h: form et ** inOfForm ** pour la valeur d'attribut id de h: inputText

<h:form id="formId">
  <h:inputText id="inOfForm" value="h:Si vous spécifiez l'attribut id dans la balise form, "valeur d'attribut id de la balise form":Il devient "valeur d'attribut d'ID spécifié"" />
</h:form>

La valeur de l'attribut id de ʻinput` est ** formId: inOfForm **.

production


<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:Si vous spécifiez l'attribut id dans la balise form, "valeur d'attribut id de la balise form":Il devient "valeur d'attribut d'ID spécifié"">
  <input type="hidden" name="javax.faces.ViewState" id="j_id1:javax.faces.ViewState:0" value="1982632179815695771:1244710352148896782" autocomplete="off">
</form>

Solution 1: si vous spécifiez prepareId = "false" dans la balise h: form, la valeur d'attribut id est la valeur spécifiée.

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

Un indicateur qui indique si l'ID de formulaire est précédé de ses ID descendants lors de la génération d'ID. La valeur par défaut est true. Si vous spécifiez ** formId ** pour la valeur d'attribut id de la balise h: form et ** inOfForm ** pour la valeur d'attribut id de h: inputText

<h:form id="formId" prependId="false">
  <h:inputText id="inOfForm" value="h:prependId dans la balise form=Si false est spécifié, l'attribut id aura la valeur spécifiée." />
</h:form>

La valeur d'attribut id de ʻinput` est ** inOfForm **.

production


<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 dans la balise form=Si false est spécifié, l'attribut id aura la valeur spécifiée.">
  <input type="hidden" name="javax.faces.ViewState" id="j_id1:javax.faces.ViewState:0" value="-3193809963809428842:-8198161006116065679" autocomplete="off">
</form>

Problème 2: la valeur d'attribut id ne devient pas la valeur spécifiée dans la balise ui: repeat

À la fois à l'extérieur et à l'intérieur de la balise h: form sera "valeur d'attribut automatique: numéro d'index: valeur d'attribut id spécifiée"

Si ** inOfRepeat ** est spécifié pour la valeur d'attribut id de h: inputText

<ui:repeat var="item" varStatus="stat" value="#{idBean.array}">
  <h:inputText id="inOfRepeat#{stat.index}" value="h:À l'intérieur de la balise de formulaire ui:Si vous utilisez la balise de répétition, la valeur d'attribut id ne sera pas la valeur spécifiée" />
</ui:repeat>

ʻLa valeur d'attribut id de l'entrée` est ** j_idt5: {numéro d'index}: inOfRepeat **.

production


<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">

Si l'attribut id n'est pas spécifié dans la balise h: form, il sera "valeur d'attribut automatique: valeur d'attribut automatique: numéro d'index: valeur d'attribut id spécifié".

Si vous spécifiez ** inOfRepeat {numéro d'index} ** dans la valeur d'attribut id de h: inputText sans spécifier l'attribut id de la balise h: form

<h:form>
  <ui:repeat var="item" varStatus="stat" value="#{idBean.array}">
    <h:inputText id="inOfRepeat#{stat.index}" value="h:À l'intérieur de la balise de formulaire ui:Si vous utilisez la balise de répétition, la valeur d'attribut id ne sera pas la valeur spécifiée" />
  </ui:repeat>
</h:form>

«La valeur d'attribut id de l'entrée» est ** j_idt5: j_idt9: {numéro d'index}: inOfRepeat **.

production


<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>

Lorsque l'attribut id est spécifié dans la balise h: form, il devient «valeur d'attribut id de la balise form: valeur d'attribut automatique: numéro d'index: valeur d'attribut id spécifiée».

Si vous spécifiez ** formId ** pour la valeur d'attribut id de la balise h: form et ** inOfRepeat {numéro d'index} ** pour la valeur d'attribut id de h: inputText

<h:form id="formId">
  <ui:repeat var="item" varStatus="stat" value="#{idBean.array}">
    <h:inputText id="inOfRepeat#{stat.index}" value="h:À l'intérieur de la balise de formulaire ui:Si vous utilisez la balise de répétition, la valeur d'attribut id ne sera pas la valeur spécifiée" />
  </ui:repeat>
</h:form>

ʻLa valeur d'attribut id de l'entrée` est ** formId: j_idt9: {numéro d'index}: inOfRepeat **.

production


<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>

Même si prepareId = "false" est spécifié dans la balise h: form, la valeur d'attribut id ne devient pas la valeur spécifiée.

Même si vous spécifiez prependId =" false " dans la balise h: form

<h:form id="formId" prependId="false">
  <ui:repeat var="item" varStatus="stat" value="#{idBean.array}">
    <h:inputText id="inOfRepeat#{stat.index}" value="h:À l'intérieur de la balise de formulaire ui:Si vous utilisez la balise de répétition, la valeur d'attribut id ne sera pas la valeur spécifiée" />
  </ui:repeat>
</h:form>

La valeur d'attribut id de la balise form ne colle tout simplement pas.

production


<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>

Solution 1: supprimez la balise jsf et écrivez avec la balise html

Remarque: c'est dommage si vous n'écrivez pas la valeur de l'attribut id pour qu'elle soit unique. C'est une mesure très délicate. Si ** inOfRepeat {numéro d'index} ** est spécifié pour la valeur d'attribut id de ʻinput`

<h:form id="formId">
  <ui:repeat var="item" varStatus="stat" value="#{idBean.array}">
    <input tyep="text" id="inOfRepeat#{stat.index}" value="h:À l'intérieur de la balise de formulaire ui:Si vous utilisez la balise de répétition, la valeur d'attribut id ne sera pas la valeur spécifiée" />
  </ui:repeat>
</h:form>

La valeur de l'attribut id de ʻinputest ** inOfRepeat {numéro d'index} **. Puisqu'il est hors du monde JSF, la valeur d'attribut id de la baliseh: form n'affecte pas même s'il n'y a pas prepareId =" false "`.

production


<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:À l'intérieur de la balise de formulaire ui:Si vous utilisez la balise de répétition, la valeur d'attribut id ne sera pas la valeur spécifiée">
  <input tyep="text" id="inOfRepeat1" value="h:À l'intérieur de la balise de formulaire ui:Si vous utilisez la balise de répétition, la valeur d'attribut id ne sera pas la valeur spécifiée">
  <input type="hidden" name="javax.faces.ViewState" id="j_id1:javax.faces.ViewState:0" value="-3641841499499477715:2017944983286472561" autocomplete="off">
</form>

Solution 2: arrêtez la balise ui: repeat et utilisez la balise c: forEach

Remarque: c'est dommage si vous n'écrivez pas la valeur de l'attribut id pour qu'elle soit unique. Puisque la balise JSTL Core (c :) est une balise héritée de JSP, n'est-elle pas de type JSF?

Si vous spécifiez ** formId ** pour la valeur d'attribut id de la balise h: form et ** inOfRepeat {numéro d'index} ** pour la valeur d'attribut id de h: inputText

<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"> <!--<<<Postscript-->
<h:form id="formId">
  <c:forEach var="item" varStatus="stat" items="#{idBean.array}">
   <h:inputText id="inOfRepeat#{stat.index}" value="h:À l'intérieur de la balise de formulaire ui:Si vous utilisez la balise de répétition, la valeur d'attribut id ne sera pas la valeur spécifiée"/>
  </c:forEach>
</h:form>

La valeur de l'attribut id de ʻinput` est ** formId: inOfRepeat {numéro d'index} **.

production


<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:À l'intérieur de la balise de formulaire ui:Si vous utilisez la balise de répétition, la valeur d'attribut id ne sera pas la valeur spécifiée">
  <input id="formId:inOfRepeat1" type="text" name="formId:inOfRepeat1" value="h:À l'intérieur de la balise de formulaire ui:Si vous utilisez la balise de répétition, la valeur d'attribut id ne sera pas la valeur spécifiée">
  <input type="hidden" name="javax.faces.ViewState" id="j_id1:javax.faces.ViewState:0" value="7276136016284590450:-4018393601695065919" autocomplete="off">
</form>

Si vous ne voulez pas attacher la valeur d'attribut id de la balise h: form, spécifiez prepareId =" false ".

<h:form id="formId" prependId="false">
...Pareil qu'avant...

production


<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:À l'intérieur de la balise de formulaire ui:Si vous utilisez la balise de répétition, la valeur d'attribut id ne sera pas la valeur spécifiée">
  <input id="inOfRepeat1" type="text" name="inOfRepeat1" value="h:À l'intérieur de la balise de formulaire ui:Si vous utilisez la balise de répétition, la valeur d'attribut id ne sera pas la valeur spécifiée">
  <input type="hidden" name="javax.faces.ViewState" id="j_id1:javax.faces.ViewState:0" value="-4294574413761401134:-7748270303136609237" autocomplete="off">
</form>

Recommended Posts

Comment spécifier l'attribut id dans JSF
Comment spécifier le chemin de la ressource dans l'importation HTML
Comment vérifier la version JSF
Comment spécifier le code de caractère et le code de saut de ligne avec JAXB
Comment utiliser Lombok au printemps
Comment trouver May'n dans XPath
Comment masquer la barre de défilement dans WebView
Comment exécuter JUnit dans Eclipse
Comment itérer indéfiniment en Ruby
Comment maîtriser la programmation en 3 mois
Comment obtenir des paramètres dans Spark
Comment utiliser InjectorHolder dans OpenAM
Comment installer jQuery dans Rails 6
Comment nommer des variables en Java
Comment définir Lombok dans Eclipse
Comment concaténer des chaînes avec Java
Comment installer Swiper in Rails
Comment obtenir l'identifiant de la clé PRIMAY incrémentée automatiquement dans MyBatis
Comment afficher une liste de chaînes dans JSF sous forme de chaînes séparées par des virgules
Comment implémenter la fonctionnalité de recherche dans Rails
Comment implémenter le calcul de la date en Java
Comment implémenter le filtre de Kalman par Java
Prise en charge multilingue de Java Comment utiliser les paramètres régionaux
Comment changer le nom de l'application dans les rails
Comment utiliser le volume nommé dans docker-compose.yml
Comment filtrer JUnit Test dans Gradle
Comment insérer une vidéo dans Rails
Comment normaliser le pied de page d'en-tête dans Thymeleaf
Comment inclure Spring Tool dans Eclipse 4.6.3?
Comment ajouter un fichier jar dans ScalaIDE
Comment faire une conversion de base en Java
Comment avoir des paramètres dans la méthode link_to
Comment utiliser Docker dans VSCode DevContainer
Comment utiliser MySQL dans le didacticiel Rails
Comment fixer la date système dans JUnit
Comment appliquer les conventions de codage en Java
Comment intégrer Janus Graph dans Java
[rails] Comment configurer le routage dans les ressources
Comment implémenter la fonctionnalité de classement dans Rails
Comment implémenter le traitement asynchrone dans Outsystems
Comprendre en 5 minutes !! Comment utiliser Docker
Comment écraser les données Firebase avec Swift
Comment utiliser credentials.yml.enc introduit à partir de Rails 5.2
Comment assembler JSON directement dans Jackson
[Pour les débutants] Comment déboguer avec Eclipse
Ajouter l'attribut SameSite au cookie en Java
Comment utiliser ExpandableListView dans Android Studio
Comment afficher les messages d'erreur en japonais
Résumé de la sélection des éléments dans Selenium
Comment obtenir les informations d'identification Keycloak dans la classe d'intercepteur
[Java FX] Comment écrire des autorisations Eclipse dans build.gradle
Comment vérifier le journal dans le conteneur Docker