2017-09-12 4 views
0

J'ai une classe d'entité avec trois types de champs différents, un pour les valeurs String, un pour les valeurs Integer et un pour les valeurs Date.Affichage de formulaire JSF nul

@Column(name = "EVDE_VALUE_STR") 
private String evdeValueStr; 

@Column(name = "EVDE_VALUE_INT") 
private Integer evdeValueInt; 

@Column(name = "EVDE_VALUE_DATE") 
@Temporal(TemporalType.TIMESTAMP) 
private Date evdeValueDate; 

créer un formulaire JSF pour créer de nouvelles instances de mon entity. Comme vous le voyez, je crée différents types de champs <h:inputText> en fonction du type de données que je veux stocker dans ma classe entity.

<h:form> 
    <ui:repeat value="#{mainWorkerMB.showAvailableEventDetailTypes()}" var="eventDetail"> 
    <tr> 
    <td> 
    <h:outputText value="#{eventDetail.edtyId.edtyName}"></h:outputText> 
    </td> 

    <td> 

    <h:inputText id="str_tst" rendered="#{eventDetail.edtyId.edtyDetailType == 'STR'}" 
    styleClass="form-control" value="#{eventDetail.evdeValueStr}" > 
    </h:inputText> 

    <h:inputText id="int_tst" rendered="#{eventDetail.edtyId.edtyDetailType == 'INT'}" 
    styleClass="form-control number_mask" value="#{eventDetail.evdeValueInt}" > 
    </h:inputText> 

    <h:inputText id="dat_tst" rendered="#{eventDetail.edtyId.edtyDetailType == 'DAT'}" 
    styleClass="form-control datepicker_base" value="#{eventDetail.evdeValueDate}"> 
    <f:convertDateTime pattern="yyyy.mm.dd" /> 
    </h:inputText> 

    </td> 
    </tr> 
    </ui:repeat> 
    <p:commandButton styleClass="btn btn-primary" actionListener="#{mainWorkerMB.createNewEvent()}" value="Save" /> 
    </h:form> 

Et ceci est le JSF HTML généré par:

<table class="table table-bordered table-hover"> 
<tr> 
<td> 
dummy str 
</td>             
<td> 
<input id="j_idt57:j_idt64:0:str_tst" type="text" name="j_idt57:j_idt64:0:str_tst" class="form-control" /> 
</td>             
</tr> 
<tr> 
<td> 
dummy int 
</td>             
<td><input id="j_idt57:j_idt64:1:int_tst" type="text" name="j_idt57:j_idt64:1:int_tst" class="form-control" /> 
</td> 
</tr> 
<tr> 
<td>dummy dat 
</td>             
<td><input id="j_idt57:j_idt64:2:dat_tst" type="text" name="j_idt57:j_idt64:2:dat_tst" class="form-control" /> 
</td>             
</tr> 
</table> 

Alors que je vois tous les types de champ généré correctement.

Ceci est mon soutien méthode de haricots qui reviennent avec les entity instances:

public List<BtrEventDetail> showAvailableEventDetailTypes() { 
     log.debug("invoked.."); 
     List<BtrDEventDetailType> detailTypeList = sessionBucketMB.getAvailableEventDetailList(); 
     detailList.clear(); 
     if (detailTypeList != null) { 
      for (BtrDEventDetailType detTyInstance : detailTypeList) { 

       BtrEventDetail newDetail = new BtrEventDetail(); 
       log.debug("setting detail instance detTyInstance: " + detTyInstance.getEdtyDetailType()); 
       newDetail.setEdtyId(detTyInstance); 
       detailList.add(newDetail); 
      } 
     } 
     return detailList; 
    } 

Et voici ma première quelques lignes de ma méthode createNewEvent():

public void createNewEvent() { 
     log.debug("invoked..."); 
     try { 
      newEvent = new NewEvenDTO(); 

      for (BtrEventDetail detail : detailList) { 

       log.debug("detail: " + detail.getEdtyId().getEdtyName() + " value: " + detail.getEvdeValueStr()); 

      } 

.. 

.. 

Après avoir frappé le bouton Enregistrer I voir ceci dans mon POST à webconsole:

javax.faces.partial.ajax true 
javax.faces.source j_idt57:j_idt71 
javax.faces.partial.execute @all 
j_idt57:j_idt71 j_idt57:j_idt71 
j_idt57 j_idt57 
j_idt57:j_idt60 18 
j_idt57:j_idt64:0:str_tst zzzz 
j_idt57:j_idt64:1:int_tst 111 
j_idt57:j_idt64:2:dat_tst 2017.11.11 
javax.faces.ViewState -2967681892162587485:-6016297341844807895 

et dans mon backing bean:

2017-09-12 09:13:19 createNewEvent DEBUG MainWorkerMB:277 - invoked... 
2017-09-12 09:13:19 createNewEvent DEBUG MainWorkerMB:283 - detail: dummy str value: zzzz 
2017-09-12 09:13:19 createNewEvent DEBUG MainWorkerMB:283 - detail: dummy int value: null 
2017-09-12 09:13:19 createNewEvent DEBUG MainWorkerMB:283 - detail: dummy dat value: null 

Cela signifie que mon champ String l'affichage des données. La valeur de tous les autres champs est nulle.

Pouvez-vous m'aider pourquoi est-ce?

MISE À JOUR!

Dans mon bean backing, je n'avais enregistré le StringValue auparavant. Donc, il n'y a pas d'erreur, les valeurs manquantes n'apparaissent pas dans mon journal de beans backing.

 log.debug("detail: " + detail.getEdtyId().getEdtyName() + " value: " + detail.getEvdeValueStr()); 

Après avoir ajouté ces deux lignes mes valeurs montrent des signes dans le journal des backing bean:

log.debug("detail: " + detail.getEdtyId().getEdtyName() + " value: " + detail.getEvdeValueInt()); 
    log.debug("detail: " + detail.getEdtyId().getEdtyName() + " value: " + detail.getEvdeValueDate()); 

Nous vous remercions de votre aide et désolé.

+0

Veuillez indiquer votre code de haricot de support. Quelles valeurs 'mainWorkerMB.showAvailableEventDetailTypes()' renvoie-t-il? – krokodilko

+0

a mis à jour ma question. Je vous remercie! – solarenqu

Répondre

0

Cochez la case eventDetail.edtyId.edtyDetailType. il ne peut pas être rendu. Les trois éléments d'entrée ne seront pas rendus en même temps.

+0

\t \t \t \t \t \t \t \t \t \t \t \t \t \t Si je fais cela, la valeur du champ d'entrée sera INT, donc je pense que c'est rendu correctement. – solarenqu

+0

@solarenqu Il n'y a pas d'attributs 'id = 'dans le code HTML que vous avez publié. – EJP

+0

a mis à jour la question, avec le code html généré et avec le journal complet des demandes de publication, et avec le formulaire jsf complet. Chaque champ d'entrée rendu correctement .. :( – solarenqu