galera… comecei agora a mexer com jsf
então comecei a criar um sisteminha, pra ver se eu pego o jeito
mas na minha primeira tela já estou com um problema. o problema é que quando eu clico no botão “registrar”, ele da refresh na pagina, mas não chama o ManagedBean
alguém sabe oq está errado? tem algum conceito do jsf que eu não entendi pra isso estar acontecendo?
segue meu código:
jsp:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<html>
<body>
<f:view>
<h:form>
<h:inputText value="#{playerBean.id}"/><br/>
<h:commandButton value="registrar" action="#{playerBean.registrar}" /><br/>
<h:selectOneMenu value="playerBean.nome">
<f:selectItems value="#{playerBean.players}"/>
</h:selectOneMenu>
</h:form>
</f:view>
</body>
</html>
ManagedBean:
public class PlayerBean implements Serializable {
private long id;
private String nome;
private List<SelectItem> players = listarPlayers();
public List<SelectItem> getPlayers() {
return players;
}
public void setPlayers(List<SelectItem> players) {
this.players = players;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
/**
* action
* @return
*/
public String registrar() {
this.id = 2;
return null;
}
private void listarPlayers() {
players = new ArrayList<SelectItem>();
players.add(new SelectItem(0, "a"));
players.add(new SelectItem(1, "b"));
players.add(new SelectItem(2, "c"));
}
}
faces-config:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
<managed-bean>
<managed-bean-name>playerBean</managed-bean-name>
<managed-bean-class>br.rafael.ui.mb.PlayerBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
</faces-config>
eu percebi que quando eu clico no botao registrar, o metodo “listarPlayers” é chamado de novo (até onde eu entendi é pq ele instancia a classe de novo), mas o registrar não é chamado
mas o curioso é: se eu tiro o select da pagina jsp, o botao registrar funciona normalmente, e altera o valor do inputText pra 2
alguém sabe oq ta acontecendo?