0

1Entityと1のNamedBeanを使用していて、保存ボタンを使用しConversationScopeて作成しましたjsf form。問題は、フォームが@injectedを使用してエンティティに投稿されたときに、エンティティBeanのプロパティ(ArticuloControllerプロパティ)が挿入されていない理由です。@inポピュレートするseam2のアノテーションに似た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>

更新:seam33.1.0.Finalを使用しています

4

1 に答える 1

1

このように JPA と CDI を混在させることは、非常に悪い考えです。このようにすると、物事は正しく保存されず、いたるところに例外が発生します。エンティティから @Name を削除し、そのプロデューサーを作成する必要があります。また、プロデューサーにスコープ アノテーションを追加する必要があります。おそらく、リクエストまたは会話は正常に機能します。

于 2012-12-04T14:10:40.093 に答える