2011-05-02 213 views
2

我这3场在JSF页面如何更新页面上显示的值,而无需刷新

<h:inputText id="val1" value="#{managedBean.val1}"/> 
<h:inputText id="val2" value="#{managedBean.val2}"/> 
<h:outputText value="#{managedBean.result}"/> 

,我也有一个支持bean这个属性:

@ManagedBean 
@RequestScoped 
public class NewOfferSupportController { 

    private String val1; 
    private String val2; 
    private String result; 

//Get set methods... 
} 

我想当某些值插入字段val1和val2而不刷新页面时,outputText元素会自动更改其值。 结果变量应该这样计算(据计算百分比):(VAL1 VAL2 *)/ 100

你能给我一只手解决一些我的疑惑?:的

我知道这样做这我需要像JavaScript或AJAX的东西。你认为应该是最好的办法吗?

我很想知道如何用AJAX做到这一点,你能给我一些提示吗?

因为我需要的字段是字符串类型,我的验证应该如何实现?

我可以避免在字段中输入非数字的字符(如果按下的键不是数字,在输入字段中根本不出现)?

+0

我不是太熟悉的Web应用程序,但你看着[性质C hange Listeners](http://download.oracle.com/javase/tutorial/javabeans/properties/bound.html)? – mre 2011-05-02 02:09:06

回答

4

如果是这种简单的计算,它不需要调用服务器,那么你应该用客户端JavaScript的解决方案


走但正如你喜欢做的使用Ajax在这里你去..

您可以使用<f:ajax>render属性,使这件事情发生使用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 
    } 

} 

请参见

1

如果您使用的是java,那么获取JQuery。一旦你已经处理,并得到想要的结果与你的代码,你可以只抢的DOM元素要在把它做一些事情,像这样:

$("#result").html(newData); 
相关问题