如果我需要获取一个整数来运行查询,那么JSF转换器的正确实现是什么?(我应该使用另一个界面吗)

如果我需要获取一个整数来运行查询,那么JSF转换器的正确实现是什么?(我应该使用另一个界面吗),jsf,ejb,Jsf,Ejb,嗨,这是我的代码: List.xhtml <h:selectOneMenu value="#{produtosController.items}"> <f:selectItems value="#{produtosController.itemsAvailableSelectOne}"/> </h:selectOneMenu> <h:commandButton action="#{produtosController.createByCodigo

嗨,这是我的代码:

List.xhtml

<h:selectOneMenu value="#{produtosController.items}">
    <f:selectItems value="#{produtosController.itemsAvailableSelectOne}"/>
</h:selectOneMenu>
<h:commandButton action="#{produtosController.createByCodigos}" value="Buscar" />
还有我的EJB

@Entity
@ViewScoped
@Table(name = "produtos")
@NamedQueries({
    @NamedQuery(name = "Produtos.findAll", query = "SELECT p FROM Produtos p"),
    @NamedQuery(name = "Produtos.findById", query = "SELECT p FROM Produtos p WHERE p.id = :id"),
    @NamedQuery(name = "Produtos.findByCodigo", query = "SELECT p FROM Produtos p WHERE p.codigo = :codigo"),
    @NamedQuery(name = "Produtos.findByDescripcion", query = "SELECT p FROM Produtos p WHERE p.descripcion = :descripcion"),
    @NamedQuery(name = "Produtos.findByImagen", query = "SELECT p FROM Produtos p WHERE p.imagen = :imagen"),
    @NamedQuery(name = "Produtos.findByMarcas", query="SELECT m FROM Produtos m WHERE m.idMarca.id = :idMarca"),
    @NamedQuery(name = "Produtos.findByModelos", query="SELECT m FROM Produtos m WHERE m.idModelo.id = :idModelo")})
public class Produtos implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    @Column(name = "codigo")
    private Integer codigo;
    @Column(name = "descripcion")
    private String descripcion;
    @Column(name = "imagen")
    private String imagen;
    @JoinColumn(name = "id_modelo", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private Modelos idModelo;
    @JoinColumn(name = "id_marca", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private Marcas idMarca;

    public Produtos() {
    }

    public Produtos(Integer id) {
        this.id = id;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getCodigo() {
        return codigo;
    }

    public void setCodigo(Integer codigo) {
        this.codigo = codigo;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public String getImagen() {
        return imagen;
    }

    public void setImagen(String imagen) {
        this.imagen = imagen;
    }

    public Modelos getIdModelo() {
        return idModelo;
    }

    public void setIdModelo(Modelos idModelo) {
        this.idModelo = idModelo;
    }

    public Marcas getIdMarca() {
        return idMarca;
    }

    public void setIdMarca(Marcas idMarca) {
        this.idMarca = idMarca;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Produtos)) {
            return false;
        }
        Produtos other = (Produtos) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "" + codigo + "";
    }
}

对不起,我没有密切注意你的代码。太多(乍一看)不相关的代码和几个过于本地化的名称只会让事情变得混乱。至少有一个主要错误是您使用了
DataModel
而不是实际的
产品
作为项目值。这毫无意义

下面是一个启动示例,代码应该如何让下拉列表中的非标准类型完美地工作

XHTML:

<h:form>
    <h:selectOneMenu value="#{bean.selectedProduct}">
        <f:selectItems value="#{bean.selectProducts}" />
    </h:selectOneMenu>
    <h:commandButton value="Submit" action="#{bean.submit}" />
</h:form>
<h:form>
    <h:selectOneMenu value="#{bean.selectedProduct}">
        <f:selectItems value="#{bean.selectProducts}" var="product" 
            itemValue="#{product}" itemLabel="#{product.description}" />
    </h:selectOneMenu>
    <h:commandButton value="Submit" action="#{bean.submit}" />
</h:form>

或者,您也可以将
f:selectItems
与新的JSF 2.0
var
属性一起使用,这样您就不需要将
List
从EJB转换为
List

XHTML:

<h:form>
    <h:selectOneMenu value="#{bean.selectedProduct}">
        <f:selectItems value="#{bean.selectProducts}" />
    </h:selectOneMenu>
    <h:commandButton value="Submit" action="#{bean.submit}" />
</h:form>
<h:form>
    <h:selectOneMenu value="#{bean.selectedProduct}">
        <f:selectItems value="#{bean.selectProducts}" var="product" 
            itemValue="#{product}" itemLabel="#{product.description}" />
    </h:selectOneMenu>
    <h:commandButton value="Submit" action="#{bean.submit}" />
</h:form>

豆子:

私人产品选择产品;//+getter+setter
私有列表选择产品;//+吸气剂
公共豆(){
selectProducts=ejb.list();
}
公开作废提交(){
System.out.println(“所选产品:+selectedProduct.getDescription());
}
这仍然需要相同的
ProductConverter


另见


非常感谢,巴卢斯成功了
<h:form>
    <h:selectOneMenu value="#{bean.selectedProduct}">
        <f:selectItems value="#{bean.selectProducts}" var="product" 
            itemValue="#{product}" itemLabel="#{product.description}" />
    </h:selectOneMenu>
    <h:commandButton value="Submit" action="#{bean.submit}" />
</h:form>
private Product selectedProduct; // +getter+setter
private List<Product> selectProducts; // +getter

public Bean() {
    selectProducts = ejb.list();
}

public void submit() {
    System.out.println("Selected product: " + selectedProduct.getDescription());
}