2017-09-12 12 views
0

私はStringの値の1つ、Integerの値の1つ、Dateの値の3つの異なるタイプのフィールドを持つエンティティクラスを持っています。JSFフォーム転記null

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

entityから新しいインスタンスを作成するためのJSFフォームを作成します。あなたは私が私のentityクラスをどのようなタイプのデータに保存したいのかに基づいて異なるタイプの<h:inputText>フィールドを作成します。私は適切に生成されたフィールドのすべての種類を見るように

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

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

は、これはJSFは、HTMLを生成しています。

これはentityインスタンスを返す私のバッキングBeanのメソッドです:私は、保存ボタンを押した後、私は

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

      for (BtrEventDetail detail : detailList) { 

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

      } 

.. 

.. 

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

そして、これが私のcreateNewEvent()方法の私の最初のいくつかのラインでありますこれを私のPOSTウェブコンソールでご覧ください:

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 
私のバッキングBeanで3210

と、この:だけ私のStringフィールドがデータを投稿、意味

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 

。他のフィールドの値はすべてnullです。

なぜ私はそれを助けることができますか?

UPDATE!

私のバッキングビーンでは、私は以前にStringValueを記録していました。だから、エラーはありません、欠けている値は私のバッキングのログには見られません。

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

私は私の値はバッキングBeanのログに表示されている。この2行を追加した後:

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

をあなたの助けをありがとう、と申し訳ありません。

+0

バッキングコードを表示してください。 'mainWorkerMB.showAvailableEventDetailTypes()'はどのような値を返しますか? – krokodilko

+0

さんが私の質問を更新しました。ありがとうございました! – solarenqu

答えて

0

eventDetail.edtyId.edtyDetailTypeを確認してください。レンダリングされない可能性があります。 3つの入力要素はすべて同時にレンダリングされません。

+0

\t \t \t \t \t \t \t \t \t \t \t \t \t \t私はこれを行う場合、入力フィールドの値はINTであろうので、私それが適切にレンダリングされたと思う。 – solarenqu

+0

@solarenqu投稿したHTMLに 'id ='属性はありません。 – EJP

+0

は生成されたhtmlと完全な投稿要求ログと完全なjsf形式で質問を更新しました。すべての入力フィールドが適切にレンダリングされました.. :( – solarenqu