私は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());
をあなたの助けをありがとう、と申し訳ありません。
バッキングコードを表示してください。 'mainWorkerMB.showAvailableEventDetailTypes()'はどのような値を返しますか? – krokodilko
さんが私の質問を更新しました。ありがとうございました! – solarenqu