Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Fabricio P Souza

[Resolvido] Problemas com renderização dinâmica - CommandButton

Recommended Posts

Olá pessoal,

 

Estou com problemas na renderização dinâmica do componente commandbutton.

 

Bom, o que está acontecendo é o seguinte: Tenho duas propriedades na classe: cad e editar, ambas booleanas.

 

cad está ligada a um botão e editar está ligada a outro.

 

o botão cad está ligado a um metodo chamado cadastrar atráves da propriedade action;

 

o botão editar está ligado a um metodo chamado alterar atráves da propriedade action;

 

O que acontece é seguinte: existe um terceiro botão, consultar que quando é pressionado muda cad para false e

editar para true, que faz com que cad não seja renderizado e editar apareça. O problema está acorrendo quando clico

em editar. ele deveria chamar o método "alterar", mas não chama e a página volta para o estado inicial, com cad visível e editar invisível.

 

Será que alguém tem alguma idéia do que pode estar acontecendo??

 

segue abaixo o código jsp e o código java

 

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
<link href="styles.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<f:view>
<h:form>
<br/>
<br/>
<h:outputText value="Código........:"/>
<h:inputText value="#{teste.cod}">
<f:convertNumber/>
</h:inputText><br/>

<h:outputText value="Nome..........:"/>
<h:inputText value="#{teste.nome}"/><br/>

<h:outputText value="Nascimento...:"/>
<h:inputText value="#{teste.nasc}">
<f:convertDateTime pattern="dd/MM/yyyy"/>
</h:inputText><br/>
[b][color="#FF0000"]
<h:commandButton id="Cad" action="#{teste.cadastrar}" value="Cadastrar" rendered="#{teste.cad}" disabled="#{not teste.cad}" style="position:absolute; top:125px; left:10px; z-index:1;"/>
<h:commandButton id="salv" action="#{teste.alterar}" value="Editar" rendered="#{teste.editar}" disabled="#{not teste.editar}" style="position:absolute; top:125px; left:120px; z-index:2;"/>[/color][/b]
<br/><br/>
<h:outputText value="#{teste.msgCad}"/>
<br/><br/><br/>
<h:dataTable value="#{teste.tabela}" var="tabela" styleClass="customers"
headerClass="customersHeader"
columnClasses="remover,custid,name,age">
<h:column>
<f:facet name="header"><h:outputText value=""/></f:facet>
<h:selectBooleanCheckbox value="#{tabela.cbRemove}"/>
</h:column>
<h:column>
<f:facet name="header"><h:outputText value="Código"/></f:facet>
<h:outputText value="#{tabela.cod}"/>
</h:column>
<h:column>
<f:facet name="header"><h:outputText value="Nome"/></f:facet>
<h:outputText value="#{tabela.nome}"/>
</h:column>
<h:column>
<f:facet name="header"><h:outputText value="Nascimento"/></f:facet>
<h:outputText value="#{tabela.nasc}">
<f:convertDateTime pattern="dd/MM/yyyy"/>
</h:outputText>
</h:column>
</h:dataTable>
<br/><br/>
<h:commandButton action="#{teste.remover}" value="Remover"/>     
<h:commandButton action="#{teste.consultar}" value="Consultar"/>     


<br/><br/>
<h:outputText value="#{teste.msgCons}"/>

</h:form>
</f:view>
</body>
</html> 

 

public class Page1 {

public Page1() {
limpaCampos();
setCad(true);
setEditar(false);
}

private Integer cod;
private String nome;
private Date nasc;
private Boolean cbRemove;
private String msgCad;
private String msgCons;
private Boolean editar = true;
private Boolean cad = true;
List< Teste > tab = new ArrayList< Teste >();


public List<Teste> getTabela(){
ResultSet q = null;
tab.removeAll(tab);
try {
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/teste");
try {
Connection conn = ds.getConnection();
try{
Statement st = conn.createStatement();
String com = "SELECT * FROM teste ORDER BY cod";
q = st.executeQuery(com);
while(q.next()){
tab.add(new Teste(q.getInt("cod"),q.getString("nome"),q.getDate("nasc"),false));
}

return tab;
}finally{
conn.close();
}
} catch (SQLException ex) {
setMsgCons(ex.toString());
return tab;
}

} catch (NamingException ex) {
setMsgCons(ex.toString());
return tab;
}

}

public String cadastrar(){
try {
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/teste");
try {
Connection conn = ds.getConnection();
try{
Statement st = conn.createStatement();
//convertendo a data
SimpleDateFormat formatador = new SimpleDateFormat("MM/dd/yyyy");
String d = formatador.format(nasc);
String com = "INSERT INTO teste VALUES ("+getCod()+",'"+ getNome()+"','"+ d +"')";
st.executeUpdate(com);
setMsgCad("Dados cadastrados");
limpaCampos();
return "ok";
}finally{
conn.close();
}
} catch (SQLException ex) {
setMsgCad(ex.toString());
return "erro";
}

} catch (NamingException ex) {
setMsgCad(ex.toString());
return "erro";
}

}

public String remover(){

ListDataModel ard = new ListDataModel(tab);
tab = (List<Teste> ard.getWrappedData();
Integer linhas = ard.getRowCount();

try {
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/teste");
try {
Connection conn = ds.getConnection();
try{
Statement st = conn.createStatement();
for (int i = 0; i < linhas; i++) {
if (tab.get(i).getCbRemove()){
String com = "DELETE FROM teste WHERE cod = "+tab.get(i).getCod();
st.executeUpdate(com);
}
}
setMsgCad("DADOS REMOVIDOS COM SUCESSO");
return "ok";
}finally{
conn.close();
}
} catch (SQLException ex) {
setMsgCad(ex.toString());
return "erro";
}

} catch (NamingException ex) {
setMsgCad(ex.toString());
return "erro";
}


}
[b][color="#FF0000"]
public String consultar(){

ListDataModel ard = new ListDataModel(tab);
tab = (List<Teste> ard.getWrappedData();
Integer linhas = ard.getRowCount();
for (int i = 0; i < linhas; i++) {
if (tab.get(i).getCbRemove()){
setCod(tab.get(i).getCod());
setNome(tab.get(i).getNome());
setNasc(tab.get(i).getNasc());
setCad(false);
setEditar(true);
}
}
return "ok";
}

public String alterar(){
try {
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/teste");
try {
Connection conn = ds.getConnection();
try{
Statement st = conn.createStatement();
//convertendo a data
SimpleDateFormat formatador = new SimpleDateFormat("MM/dd/yyyy");
String d = formatador.format(nasc);
String com = "UPDATE teste SET nome = '"+ getNome()+"', nasc = '"+ d +"' WHERE cod = "+getCod();
st.executeUpdate(com);
setMsgCad("Dados cadastrados");
setCad(true);
setEditar(false);
limpaCampos();
return "ok";
}finally{
conn.close();
}
} catch (SQLException ex) {
setMsgCad(ex.toString());
return "erro";
}

} catch (NamingException ex) {
setMsgCad(ex.toString());
return "erro";
}
[/color][/b]

}

private void limpaCampos(){
setCod(null);
setNome(null);
setNasc(null);
}



}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você não indentar vai ser dificil, desculpe mas dá até preguiça ler o codigo assim... Mas vou adiantando k sua class ta muito acoplada e muito pouco coesa... pesquise sobre design patterns como DAO ... Tire mais proveito de OO...

Compartilhar este post


Link para o post
Compartilhar em outros sites

hehehe!! foi mal... perdeu a identação quando postei aqui!!

 

Bom eu acabei resolvendo o problema através uma "gambiarra". Ao invés de utilizar propriedade "rendered" do cammandButton, eu coloquei ele dentro uma DataTable, aí eu utilizei a propriedade dela. Então, quando não renderizo a coluna, o botão não aparece, e quando mudo "rendered" para true, ele aparece.

 

Valeus!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.