0
votes

I have a entity class with three different type of fields, one for String values, one for Integer values, and one for Date values.

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

I create a JSF form to create new instances from my entity. As you see I create different type of <h:inputText> fields based on what type of data do I want my entity class to store.

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

And this is the jsf generated html:

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

So as i see all type of field generated properly.

This is my backing bean method that return with the 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;
    }

And this is my first few line of my createNewEvent() method:

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

            for (BtrEventDetail detail : detailList) {

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

            }

..

..

After I hit the Save button I see this in my POST at 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

and this in my 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

That means, only my String field posting the data. All other field's value is null.

Can you help me why is that?

UPDATE!

In my backing bean, I only logged the StringValue before. So there isn't any error, the missing values just doesn't seen in my backing bean log.

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

After I added this two lines my values are showing in the backing bean log:

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

Thank you for your help, and sorry.

1
Please show your backing bean code. What values does mainWorkerMB.showAvailableEventDetailTypes() return ? - krokodilko
updated my question. thank you! - solarenqu

1 Answers

0
votes

Check the eventDetail.edtyId.edtyDetailType. it may not be rendered. All three input elements will not be rendered at the same time.