提交JSF数据表时初始化JPA子实体

时间:2019-01-29 18:22:28

标签: jpa jsf datatable initialization selectonelistbox

我最近收到了一个业务需求,我的JSF应用程序可以在表本身中编辑数据表的行。

问题

该表由JPA实体列表支持,但是可编辑字段属于它们的-可选-关联。因此,作为这样一个可编辑的selectOneListbox字段的示例,如果我这样做:

<h:selectOneListbox id="rca" value="#{mainEntity.associatedEntity.rca}" converter="omnifaces.SelectItemsConverter">
    <f:selectItem itemValue="#{null}" itemLabel="" />
    <f:selectItems value="#{rcaOptions}" var="rca" itemLabel="#{rca}" itemValue="#{rca}" />
</h:selectOneListbox>

对于那些还没有关联实体的行,我最终在提交表时收到Target Unreachable, 'associatedEntity' returned null,即使我为这些行保留了selectOneListbox不变(选择了null选项)。

问题

  1. 在提交表单时,我如何/在何处/何时可以优雅地实例化新的子实体,仅针对用户所操作的那些行(最好不使用ajax),以防止出现上述错误?第一次渲染表时,在模型中为所有行强制创建子实体是恕我直言,这是设计上的缺陷。

  2. 如何有条件地从整个JSF生命周期中以编程方式忽略此selectOneListbox或任何其他输入字段,就像该字段在请求中不存在一样?我尝试实现多个转换器和验证器,但是无论我尝试什么,验证阶段仍在尝试获取值引用,并抛出上面显示的错误

0 个答案:

没有答案