我正在尝试使用h:selectOneMenu,但它不会将值发送到backbean。我尝试发送一个简单的值,一个完整的bean。
以下是代码:
<h:selectOneMenu value="#{campanha.campanha}" onchange="submit();">
<f:selectItems value="#{campanha.campanhas}" var="c" itemLabel="#{c.nome}" itemValue="# c.codigo}" />
</h:selectOneMenu>
`
豆:
@ManagedBean(name = "campanha")
@RequestScoped
public class CCampanha {
private List<Campanha> campanhas;
private Campanha campanha;
public void inicializar(ComponentSystemEvent event) {
campanhas = new ArrayList<Campanha>();
campanhas.add(new Campanha(1, "campanha 1"));
campanhas.add(new Campanha(2, "campanha 2"));
campanhas.add(new Campanha(3, "campanha 3"));
campanhas.add(new Campanha(4, "campanha 4"));
campanhas.add(new Campanha(5, "campanha 5"));
campanhas.add(new Campanha(6, "campanha 6"));
campanhas.add(new Campanha(7, "campanha 7"));
}
public String selecionarCampanha() {
System.out.println(campanha.getCodigo());
return "busca.jsf?faces-redirect=true";
}
public List<Campanha> getCampanhas() {
return campanhas;
}
public void setCampanhas(List<Campanha> campanhas) {
this.campanhas = campanhas;
}
public Campanha getCampanha() {
return campanha;
}
public void setCampanha(Campanha campanha) {
this.campanha = campanha;
}
}
提交表单后,控制台会显示此消息:
03/02/2014 14:37:12 com.sun.faces.renderkit.RenderKitUtils renderUnhandledMessages
INFO: AVISO: FacesMessage(s) foram enfileirados, mas podem não ter sido exibidos.
sourceId=j_idt12:j_idt16[severity=(ERROR 2), summary=(Erro de conversão ao definir o valor '5' para 'null Converter'. ), detail=(Erro de conversão ao definir o valor '5' para 'null Converter'. )]
它意味着:无法将'5'转换为'null converter'。转换错误。
我正在使用Java,jsf2.2和tomcat 6。
答案 0 :(得分:1)
在你的情况下尝试这个,更改在这里,默认情况下jsf支持Integer(和更多see this)转换器,你提交一个对象value="#{campanha.campanha}"
所以你需要创建custom convertor,
@ManagedBean(name="campanha")
//someScoped
public class Campanha {
}
<h:selectOneMenu value="#{cCampanha.campanha.codigo}" onchange="submit();">
<f:selectItems value="#{cCampanha.campanhas}" var="c" itemLabel="#{c.nome}" itemValue="# c.codigo}" />
</h:selectOneMenu>
@RequestScoped
public class CCampanha {
private List<Campanha> campanhas;
@ManagedProperty(value = "#{campanha}")
private Campanha campanha;
public void inicializar(ComponentSystemEvent event) {
campanhas = new ArrayList<Campanha>();
campanhas.add(new Campanha(1, "campanha 1"));
campanhas.add(new Campanha(2, "campanha 2"));
campanhas.add(new Campanha(3, "campanha 3"));
campanhas.add(new Campanha(4, "campanha 4"));
campanhas.add(new Campanha(5, "campanha 5"));
campanhas.add(new Campanha(6, "campanha 6"));
campanhas.add(new Campanha(7, "campanha 7"));
}
public String selecionarCampanha() {
System.out.println(campanha.getCodigo());
return "busca.jsf?faces-redirect=true";
}
public List<Campanha> getCampanhas() {
return campanhas;
}
public void setCampanhas(List<Campanha> campanhas) {
this.campanhas = campanhas;
}
public Campanha getCampanha() {
return campanha;
}
public void setCampanha(Campanha campanha) {
this.campanha = campanha;
}
}
by @ManagedProperty
我们将托管bean注入另一个托管bean的属性,例如mkyong
答案 1 :(得分:0)
您可以尝试在:
中使用相同的var类型 h:selectOneMenu
- &gt;值
并在
f:selectItems
&gt;项目值
您正在使用对象
h:selectOneMenu - &gt; value="#{campanha.campanha}"
和一个原始的类型
f:selectItems&gt; itemValue="# c.codigo}"
只需替换它:
<h:selectOneMenu value="#{campanha.campanha}" onchange="submit();">
这一个:
<h:selectOneMenu value="#{campanha.campanha.codigo}" onchange="submit();">
当然,如果campanha.campanha永远不为null,则此解决方案有效,否则会出错
或者您可以尝试在CCampanha中声明一个整数变量,并将此变量设置为 h:selectOneMenu - &gt;值