如何使用JSF Richfaces AJAX向/从bean函数发送/接收数据?

时间:2013-05-23 17:07:42

标签: java spring jsf xhtml richfaces

我正在尝试在XHTML / JSF / Spring应用程序中使用一些代码,通过该代码我将一个ID发送到bean函数并期望返回一个字符串。我还没有找到关于这个的可理解的教程,也没有在SO上找到任何已回答的问题。

XHTML:

<h:form>
    <h:inputText id="inputId" value="#{npBean.idString}"/>
    <a4j:commandButton value="get def" render="out">        
        <f:param value="#{npBean.idString}" name="id" />    
        <f:setPropertyActionListener target="#{npBean.definition}"/>
    </a4j:commandButton>

    <a4j:outputPanel id="out">
        <h:outputText id="outputId" value="#{npBean.def}" 
                                        rendered="#{not empty npBean.def}"/>
    </a4j:outputPanel>

</h:form>

爪哇:

public String getDefinition(int id)
{
    def = this.getXService().getXData(id).getDefinition(); 
    return def;
}

显示的所有值都包含bean中的getter和setter。

1 个答案:

答案 0 :(得分:1)

我们基本上做了什么:

  1. value组件的<h:inputText>映射到托管bean中的属性(带有getter / setter)(名为myBean
  2. 通过使用reRender组件的<a4j:commandButton>属性,我们指出在单击按钮时要重新呈现(刷新)页面上的哪个组件。
  3. 单击该按钮时,将执行managedBean中的invokeService()方法,并更新managedBean的其他属性。
  4. 在下面的<h:panelGroup>中,我们有几个<h:outputText>组件,并且我们指定了必须在页面上显示组件的rendered属性。
  5. 探索托管bean,唯一需要的是属性的访问者,它保存服务调用的结果。
  6. 这是* .xhtml示例:

    <ui:composition xmlns="http://www.w3.org/1999/xhtml"
          xmlns:ui="http://java.sun.com/jsf/facelets"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:a4j="http://richfaces.org/a4j"
          xmlns:rich="http://richfaces.org/rich">
    
        <a4j:form>
            <h:panelGrid columns="3">
                <h:outputText value="String value:" />
                <h:inputText value="#{myBean.value}" />
                <a4j:commandButton value="Click" reRender="out">
                    <a4j:actionListener listener="#{myBean.invokeService}" />
                </a4j:comandButton>
            </h:panelGrid>
        </a4j:form>
        <rich:spacer height="7"/>
        <br />
        <h:panelGroup id="out">
            <h:outputText value="Service returned: " rendered="#{not empty myBean.result}" />
            <h:outputText value="#{myBean.result}" />
        </h:panelGroup>
    
    </ui:composition>
    

    托管豆:

    @ManagedBean(name = "myBean")
    @SessionScoped //for example
    public class MyBean {
       private String value;
    
       private String result;
    
       public String getValue() {
          return value;
       }
    
       public void setValue(String value) {
          this.value = value;
       }
    
       public String getResult() {
          return result;
       }
    
       public void invokeService(ActionEvent actionEvent) {
          this.result = "Hello, " + value + "!";
       }
    }
    

    正如@Luiggi所提到的,访问器方法必须符合以下约定(如果我们假设您在托管bean中有private <some-type> property;。)

     public <some-type> getProperty { 
         return property; 
     }
    
     public void setProperty(<some-type> property) {
         this.property = property:
     }
    

    为了了解RichFaces组件的工作原理以及良好的代码示例,我建议您打开this地址并使用组件。