当前位置: 首页 > 知识库问答 >
问题:

JSF表单过帐空

公良运锋
2023-03-14

我有一个具有三种不同类型字段的实体类,一个用于string值,一个用于integer值,一个用于date值。

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

我创建了一个JSF表单,以便从我的实体创建新实例。如您所见,我创建了不同类型 字段,这取决于我希望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>

这是jsf生成的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>

所以我看到所有类型的字段都是正确生成的。

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;
    }
public void createNewEvent() {
        log.debug("invoked...");
        try {
            newEvent = new NewEvenDTO();

            for (BtrEventDetail detail : detailList) {

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

            }

..

..

单击Save按钮后,我在WebConsole的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

这是我的后盾:

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

这意味着只有我的string字段发布数据。所有其他字段的值都为空。

更新!

在我的backing bean中,我之前只记录了StringValue。所以没有任何错误,丢失的值只是在我的backing bean日志中看不到。

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

在我添加了这两行之后,我的值显示在backing bean日志中:

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

共有1个答案

督德明
2023-03-14

检查EventDetail.EdtyId.EdtyDetailType。可能无法呈现。不会同时呈现所有三个输入元素。

 类似资料:
  • 问题内容: 我已经看过有关该主题的文章和帖子(包括SO),并且普遍的评论是,同源策略阻止跨域的POST形式。我见过有人建议将同源政策不适用于表单帖子的唯一位置是此处 我想从更“官方”或正式的来源获得答案。例如,是否有人知道解决同源性如何影响表单POST的RFC? 澄清 :我不是问是否可以构造GET或POST并将其发送到任何域。我在问: 如果Chrome,IE或Firefox允许域“ Y”中的内容将

  • 我已经看到了关于这个主题的所有文章和帖子(包括这样),普遍的评论是同源策略阻止了跨域的表单帖子。我唯一看到有人建议同源政策不适用于表格帖子的地方是这里。 我想从一个更“官方”或正式的来源得到答案。例如,有人知道解决同源如何影响或不影响表单张贴的RFC吗? 澄清:我不是问一个GET或POST是否可以被构造并发送到任何域。我在问: 如果Chrome、IE或Firefox允许来自域“Y”的内容向域“X”

  • 有什么办法可以防止这个发帖吗?我假设我必须做一些hack-y javascript来拦截提交到实际表单。 条带按钮代码:https://stripe.com/docs/button

  • 我正在使用HttpWebRequest发布到MMS API。文章正文包含有关传递和彩信的XML数据,作为需要Base64编码的MIME多部分附件。 帖子是成功的,但我只收到文字,而不是图像。 查看我的代码时,它似乎构建了表单数据,但当我将其转换回字符串时,文件数据丢失了。 str变量的内容: ------------f2de17263b724d5a919b14a6834c489f内容配置:表单数据

  • 我正在创建一个扩展,该扩展通过使用Codenvy提供的REST API来实现过程的自动化。然而,我遇到了多部分/表单数据POST请求的麻烦。具体地说,就是创建一个新工厂。 这是我的Ajax/jQuery调用: 但我得到一个409错误的消息: 在多部分/表单-数据的“工厂URL”部分中找不到工厂URL信息 我已经在Codenvy论坛上发了帖子,但我得到的唯一有用的东西是一个curl命令

  • 主要内容:硬编码组合框实例,由映射生成组合框实例,组合框内部项以下部分介绍如何从JSF创建HTML组合框。标签呈现大小未指定的“”类型的HTML输入元素。 以下JSF标签 - 被渲染成以下HTML代码 - 硬编码组合框实例 以下是文件:index.xhtml 中的代码 - 以下是文件:result.xhtml 中的代码 - 以下是文件:UserBean.java 中的代码 - 由映射生成组合框实例 以下是文件:UserBean.java 中的代码 - 以下是