我有1个Entity和1个带有ConversationScope的Named Bean,我创建了一个带有保存按钮的jsf form,我的问题是,为什么当我的表单通过@injected发布我的实体时,实体bean的属性(ArticuloController属性)没有被注入。存在类似于seam2的@in注释的cdi,用于填充@inject Entity entity。
这是我的源代码:
@Entity
@Named("articulo")
public class Articulo implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "articulo_seq")
@SequenceGenerator(name = "articulo_seq", sequenceName = "articulo_seq")
private Integer articulo;
private String descripcion="";
//my action class
@Named("articuloController")
@ConversationScoped
public class ArticuloController implements Serializable {
@Inject
private Articulo articulo;
@Inject
private Messages messages;
@Begin
public String init() {
messages.info("init conversation");
//this values is not show in the jsf form
articulo.setDescripcion("complete descripcion");
articulo.setPrecio(new BigDecimal(0));
return null;
}
public String save() {
//the values of the properties is not the values filled by user,
//but is the values filled by init method
System.out.println("save!" + articulo.getDescripcion()
+ articulo.getPrecio() + " " + id);
return null;
}
my jsf page is
<f:metadata>
<f:viewParam name="id" value="#{articuloController.id}" />
<s:viewAction action="#{articuloController.init}" />
</f:metadata>
<h:form>
<h:panelGrid columns="3" id="panel">
<h:outputLabel value="Descripcion" />
<h:inputText value="#{articulo.descripcion}" id="descripcion"
required="true" label="Descripción" />
<rich:message for="descripcion" />
<h:outputLabel value="Precio" />
<h:inputText value="#{articulo.precio}" id="precio" required="true"
label="Precio" />
<rich:message for="precio" />
<h:commandButton value="Guardar" action="#{articuloController.save}" />
</h:panelGrid>
</h:form>更新:我使用的是seam3 3.1.0 using
发布于 2012-12-04 22:10:40
以这种方式混合JPA和CDI是一个非常糟糕的想法。如果你这样做,就不能正确地保存东西,而且到处都会有异常。您需要做的是从entity中删除@Name并为其创建一个生产者。您还需要向生产者添加一个作用域注释,请求或对话可能会很好地工作。
https://stackoverflow.com/questions/13691391
复制相似问题