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