Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Formulario com primefacess

Pessoal boa tarde estou com uma duvida em um formulario simples em java com prime, é a soma de dois valores? quero mostrar a soma no input text após clicar no botao soma:

    <h:form>
        <p:messages id="messages" />
        <p:panelGrid columns="2">

            <p:outputLabel for="valor1" value="Valor1:" />
            <p:inputText id="valor1" value="#{soma.valor1}" />

            <p:outputLabel for="valor2" value="Valor2:" />
            <p:inputText id="valor2" value="#{soma.valor2}" />

            <p:outputLabel for="total" value="Total:" />
            <p:inputText id="total" value="#{}" />  quero o resultado aqui


            <p:commandButton value="Soma" action="#{soma.somar}" ajax="false" />    

        </p:panelGrid>
    </h:form>
package lista;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class Soma {

    double valor1;
    double valor2;
    double total;

    public Soma() {
        super();
    }

    public Soma(double valor1, double valor2, double total) {
        super();
        this.valor1 = valor1;
        this.valor2 = valor2;
        this.total = total;
    }

    public double getTotal() {
        return total;
    }

    public void setTotal(double total) {
        this.total = total;
    }

    public double somar() {        

        Soma soma = new Soma();
        soma.setValor1(soma.getValor1());
        soma.setValor2(soma.getValor2());
        double total = this.valor1 + this.valor2;

        return total;


    }

    public double getValor1() {
        return valor1;
    }

    public void setValor1(double valor1) {
        this.valor1 = valor1;
    }

    public double getValor2() {
        return valor2;
    }

    public void setValor2(double valor2) {
        this.valor2 = valor2;
    }

}
3 respostas

Oi Julian

na classe Soma, no metodo somar() você codifica assim:

public void somar() {        

        Soma soma = new Soma();
        soma.setValor1(soma.getValor1());
        soma.setValor2(soma.getValor2());
        this.total = this.valor1 + this.valor2;
    }

e no xhtml,

<p:outputLabel for="total" value="Total:" />
            <p:inputText id="total" value="#{soma.total}" />
solução!

oi Julian, tudo bem?

vamos lá, o seu .xhtml está correto, e o value do inputText total tem que ser:

<p:inputText id="total" value="#{soma.total}"/>

mas por que vc quer guardar o resultado em um campo editável? não seria melhor guardar no proprio outputLabel?

No seu ManagedBean, tem alguns pontos de atenção.

Quem é responsável por criar o objeto é o JSF e não a gente por isso não podemos usar o construtor, caso queiramos setar algum valor no momento da instancia do objeto procisamos fazer isso em um método com a anotação @PostConstruct, o que não é o seu caso nesse momento.

No método somar, você não precisa retornar a soma já que vc está fazendo o binding do atributo no .xhtml (é aquela parte do value="#{soma.total}"), então ele vai ser um void e não vai ter retorno:

public void somar() {        
        Soma soma = new Soma();
        soma.setValor1(soma.getValor1());
        soma.setValor2(soma.getValor2());
        double total = this.valor1 + this.valor2;
    }

Como vimos, não precisamos instanciar a classe soma e nem usar os setters já que o JSF será responsável por tudo isso. Nossa classe vai ficar assim:

package lista;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class Soma {

    double valor1;
    double valor2;
    double total;

    public void somar() {        
       this.total = this.valor1 + this.valor2;
    }

    public double getValor1() {
        return valor1;
    }

    public void setValor1(double valor1) {
        this.valor1 = valor1;
    }

    public double getValor2() {
        return valor2;
    }

    public void setValor2(double valor2) {
        this.valor2 = valor2;
    }

    public double getTotal() {
        return total;
    }

    public void setTotal(double total) {
        this.total = total;
    }
}

espero ter ajudado =)

Pessoal valeu, funcionou, na verdade eu comecei agora, estou meio perdido ainda em muitas coisas, mas funcionou de boa, retornou o valor as valeu dicas muito boas valeu pessoal