entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

No me llegan los valores al Bean

En mi inputNUmber trato de capturar el valor y cuando lo paso como parametro al metodo y debuggeo veo que en el bean el valor del parametro no llega,ademas de que el metodo calcularTotalPoblacion es un metodo local que lo que hace es darle valor a un atributo, y realizo todas las llamadas posibles al atribto con get etc y tampoco se ejecuta el metodo,cada vez que lo debugueo todos los valores son ceros....aqui esta el codigo de ejemplo

<pe:inputNumber id="morbilidad"
  value="#{gestionIntegralBean.proyectoAmbientalNoRegulado.mobilidad}" >
   <f:ajax event="keyup" listener="#{gestionIntegralBean.validate_mobilidad(gestionIntegralBean.proyectoAmbientalNoRegulado.mobilidad)}">
</pe:inputNumber>

///////////////////////Bean///////////////////

public void validate_mobilidad(Double mobilidad){
 calcularTotalPoblacion();
 ProyectoAmbientalNoRegulado ambiental=new ProyectoAmbientalNoRegulado();
 Double ultimo=ambiental.getMobilidad();
 Double valor_poblacion=this.totalPoblacion;
 Double valor_poblacion1=this.getTotalPoblacion();
 Double valor_poblacion2=getTotalPoblacion();
 if (valor_poblacion >= mobilidad) {
   throw new ValidatorException(new FacesMessage("El total de población no puede ser  igual o mayor que la mobilidad"));

  }
 }

1 Respuesta

2votos

MitsuGami Puntos8010

Si los datos no llegan al bean pueden ser por distintas causas. Para determinar la causa, coloca un <h:messages id="errorMsgs" > debajo del input, y en el atributo render de <f:ajax ...> renderízalo.

<p:inputNumber ...>
    <f:ajax event="keyup" listener="#{...}" render="errorMsgs" >
</p:inputNumber>
<h:messages id="errorMsgs" >

Si ocurre un error respecto a ese control, de validación o lo que sea, debe mostrarse el el h:messages.

Actualización

Lo que debes hacer es esto. En cada inputText, debes llamar a algún método que sume el valor ingresado en ese input al total existente.

<p:inputNumber id="urbana" value="#{gestionIntegral.urbana}">
    <f:ajax execute="@this" listener="#{gestionIntegral.sumar()}" render="lblTotalPoblacion"/>
</p:inputNumber>

En el bean:

private int totalPoblacion = 0;

...

public void sumar(AjaxBehaviourEvent e) {
    totalPoblacion += Integer.valueOf(((UIInput) e.getSource()).getValue().toString());
}

// opción 2
public void sumar(AjaxBehaviourEvent e) {
    totalPoblacion += urbana + rural + indiceCrecimiento;
}

En la opción A no necesitas asociar una variable del Bean al inputNumber, se obtiene directamente del control el valor ingresado, lo que es bueno si no vas a usar esas variables más que para la suma. En la opción B, asocias una variable a cada inputNumber, y en el listener sumas todas las variables.

PD: Los métodos en Java siguen la nomenclatura camelCase. Te recomiendo seguir esta convención ya que tendrás uno que otro problema por ello.

0voto

Raudel comentado

lo puse asi como me recomienda y nada,yo tengo entendido que si uno pone en el value
value="#{mibean.nombre}" una vez que se escribe el campo nombre se actualiza automaticamente o hay que esperar que se presione el boton enviar guardar etc para que el campo nombre coja el valor que se le pasa en el formulario?

0voto

MitsuGami comentado

No, solo tienes que renderizar el elemento en donde se debe mostrar el nombre. Por ejemplo: <f:ajax ... render="salidaNombre"/>, donde salidaNombre es el id para un elemento JSF como <h:form> o <h:gridPane>.

0voto

Raudel comentado

Mi hermano disculpa la molestia, es que realmente soy nuevo en este tema, y no hay manera de que en el input label que tengo se me muestre el resultado fial de la suma de los 3 campos,aqui te dejo la parte del codigo a ver si tu puedes observar que es lo que estoy haciendo mal y de que manera puedo corregirlo..un abrazo y gracias de ante mano..saludos

<p:panelGrid columns="1" layout="grid" id="pnlTotalPoblacion" styleClass="w100">
 <f:facet name="header">
 <h:outputText value="Población">
 </f:facet>

<p:panelGrid columns="3" layout="grid" styleClass="w100" columnClasses="w30,w30, w30 ">
 <p:panelGrid columns="1" layout="grid" styleClass="w100">
 <f:facet name="header"><h:outputText value="Urbana" id="urbana" ></f:facet>
 <pe:inputNumber value="#{gestionIntegralBean.urbana}" id="urbana_input_number"        validatorMessage="El campo 'Urbana' debe tener máximo 7 digitos."
 maxValue="9999999" minValue="0" maxlength="7">
</p:panelGrid>

<p:panelGrid columns="1" layout="grid" styleClass="w100">
 <f:facet name="header"><h:outputText value="Rural" id="rural"></f:facet>
 <pe:inputNumber value="#{gestionIntegralBean.rural}" id="rural_input_number"  validatorMessage="El campo 'Rural' debe tener máximo 7 digitos."
 maxValue="9999999" minValue="0" maxlength="7">
</p:panelGrid>

<p:panelGrid columns="1" layout="grid" styleClass="w100">
<f:facet name="header"><h:outputText value="Índice de crecimiento" id="indiceCrecimiento" ></f:facet>
 <pe:inputNumber value="#{gestionIntegralBean.indiceCrecimiento}"  id="indice_crecim_input_number" maxValue="999.99" minValue="0" maxlength="3">
</pe:inputNumber>
</p:panelGrid>

 <p:panelGrid columns="2" layout="grid" styleClass="w100" columnClasses="w50, w50">
 <p:outputLabel value="#{gestionIntegralBean.totalPoblacion}" id="lblTotalPoblacion"></p:outputLabel>
 <f:ajax  listener="#{gestionIntegralBean.totalPoblacion}"  render="lblTotalPoblacion">
 </p:panelGrid>
</p:panelGrid>
</p:panelGrid>

1voto

MitsuGami comentado

He actualizado el post. Revisa y comentas si eso es lo que quieres.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta