jpa jsf 持久化一个实体与已经存在的相关实体
jpa jsf Persisting an entity with related entity which already exists
我有一个 jsf 表单来添加任务,这些任务被分配给特定的工作人员select来自 selectOneMenu,但是当我提交它时抛出这个错误
summary=(Conversion Error setting value 'com.jpa.entities.PERSONAL@5f9f87f' for 'null Converter'.), detail=(Conversion Error setting value 'com.jpa.entities.PERSONAL@5f9f87f' for 'null Converter'.)]
我需要构建转换器还是我错误地使用了 select?
我是 JSF 和 JPA 的新手,这让我发疯。
XHTML:
<b:form>
<div class="row">
<div class="col-md-4">
<h:outputLabel value="Nombre" />
<h:inputText styleClass="form-control"
value="#{tareasController.tar.NOMBRE}">
</h:inputText>
</div>
<div class="col-md-4">
<h:outputLabel value="Fecha de asignacion" />
<b:datepicker value="#{tareasController.tar.FECHA}"></b:datepicker>
</div>
<div class="col-md-4">
<h:outputLabel value="Hora limite" />
<b:dateTimePicker value="#{tareasController.tar.HORA_LIMITE}"></b:dateTimePicker>
</div>
</div>
<div class="row">
<div class="col-md-4">
<h:outputLabel value="Personal" />
<h:selectOneMenu value="#{tareasController.tar.PERSONAL}"
styleClass="form-control">
<f:selectItem itemLabel="Select" itemValue="#{null}" />
<f:selectItems value="#{tareasController.personal}" var="per"
itemLabel="#{per.NOMBRE}" itemValue="#{per}"></f:selectItems>
</h:selectOneMenu>
</div>
</div>
<div class="row">
<div class="col-md-6"
style="padding-top: 20px; padding-bottom: 20px;">
<h:outputLabel></h:outputLabel>
<h:commandButton class="btn btn-info" value="Guardar"
action="#{tareasController.addTarea(tar)}"></h:commandButton>
服务:
public void addTarea(TAREA tar) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("WebApp");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(tar);
em.getTransaction().commit();
em.close();
}
感谢您的帮助。
如果您想设置整个实体,则必须像这样创建一个转换器:
<p:selectManyMenu value="#{bean.selectedDict}" converter="omnifaces.SelectItemsConverter">
<f:selectItems value="#{bean.dicts}" var="item" itemLabel="#{item.code} #{item.name}" itemValue="#{item}"/>
</p:selectManyMenu>
更多详情:
http://showcase.omnifaces.org/converters/SelectItemsConverter
我有一个 jsf 表单来添加任务,这些任务被分配给特定的工作人员select来自 selectOneMenu,但是当我提交它时抛出这个错误
summary=(Conversion Error setting value 'com.jpa.entities.PERSONAL@5f9f87f' for 'null Converter'.), detail=(Conversion Error setting value 'com.jpa.entities.PERSONAL@5f9f87f' for 'null Converter'.)]
我需要构建转换器还是我错误地使用了 select? 我是 JSF 和 JPA 的新手,这让我发疯。
XHTML:
<b:form>
<div class="row">
<div class="col-md-4">
<h:outputLabel value="Nombre" />
<h:inputText styleClass="form-control"
value="#{tareasController.tar.NOMBRE}">
</h:inputText>
</div>
<div class="col-md-4">
<h:outputLabel value="Fecha de asignacion" />
<b:datepicker value="#{tareasController.tar.FECHA}"></b:datepicker>
</div>
<div class="col-md-4">
<h:outputLabel value="Hora limite" />
<b:dateTimePicker value="#{tareasController.tar.HORA_LIMITE}"></b:dateTimePicker>
</div>
</div>
<div class="row">
<div class="col-md-4">
<h:outputLabel value="Personal" />
<h:selectOneMenu value="#{tareasController.tar.PERSONAL}"
styleClass="form-control">
<f:selectItem itemLabel="Select" itemValue="#{null}" />
<f:selectItems value="#{tareasController.personal}" var="per"
itemLabel="#{per.NOMBRE}" itemValue="#{per}"></f:selectItems>
</h:selectOneMenu>
</div>
</div>
<div class="row">
<div class="col-md-6"
style="padding-top: 20px; padding-bottom: 20px;">
<h:outputLabel></h:outputLabel>
<h:commandButton class="btn btn-info" value="Guardar"
action="#{tareasController.addTarea(tar)}"></h:commandButton>
服务:
public void addTarea(TAREA tar) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("WebApp");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(tar);
em.getTransaction().commit();
em.close();
}
感谢您的帮助。
如果您想设置整个实体,则必须像这样创建一个转换器:
<p:selectManyMenu value="#{bean.selectedDict}" converter="omnifaces.SelectItemsConverter">
<f:selectItems value="#{bean.dicts}" var="item" itemLabel="#{item.code} #{item.name}" itemValue="#{item}"/>
</p:selectManyMenu>
更多详情: http://showcase.omnifaces.org/converters/SelectItemsConverter