How to update the value displayed on the page without updating
I have this 3 fields in a JSF page
<h:inputText id="val1" value="#{managedBean.val1}"/>
<h:inputText id="val2" value="#{managedBean.val2}"/>
<h:outputText value="#{managedBean.result}"/>
And I also have bean support with these attributes:
@ManagedBean
@RequestScoped
public class NewOfferSupportController {
private String val1;
private String val2;
private String result;
//Get set methods...
}
I want the outputText element to automatically change its value when some values ββare inserted into val1 and val2 fields without refreshing the page. The result variable should be calculated this way (it calculates the percentage): (val1 * val2) / 100
Can you give me a hand to resolve some of my doubts ?:
I know I need something like javascript or AJAX for this. What do you think is the best way to do this?
I love to know how can I do this with AJAX, can you please give me some advice?
Since I need fields of type String, how should my validation be implemented?
Can I just avoid characters that are not numbers to enter in fields (If the key pressed is not a number, it is not shown in the input field at all)?
source to share
If this is a simple calculation that doesn't require a server call, then you should go with a client side javascript solution
But how do you like doing it using Ajax here you go.
You can use the <f:ajax>
and attribute render
to make this thing happen using AJAX.
<h:form>
<h:inputText value="#{managedBean.val1}" >
<f:ajax event="keyup" render="result" listener="#{managedBean.someThingToDoListener}"/>
</h:inputText>
<h:inputText value="#{managedBean.val2}" >
<f:ajax event="keyup" render="result" listener="#{managedBean.someThingToDoListener}"/>
</h:inputText>
<h:outputText id="result" value="#{managedBean.result}"/>
</h:form>
@ManagedBean(name = "managedBean")
public class Bean {
private String val1; // getter and setter
private String val2; // getter and setter
private String res; // getter and setter
...
public void someThingToDoListener(AjaxBehaviorEvent event) {
//res = some processing
}
}
see also
source to share