2010-05-29 11 views
2
ENABLED

J'utilise des composants composites dans mon projet JSF 2.0, et je veux combiner mes composants composites avec comme ceci:Ajax-pièce composite

<ex:mycompositecomponent> 
    <f:ajax event="change" render="anotherComponent" /> 
</ex:mycompositecomponent> 

Est-il possible de le faire?

Répondre

0

Devrait être.

Le code suivant est la peine d'essayer:

<!-- mycompositecomponent.xhtml --> 
    ... 
    <composite:implementation> 
     <h:inputText ...> 
     <composite:insertChildren /> <!-- contents within <ex:mycompositecomponent>...</ex:mycom....> goes here --> 
     </h:inputText> 
    </composite:implementation> 
    ... 

Maintenant votre utilisation de mycompositecomponent.xhtml devrait fonctionner.

+0

s'il voulait ajouter plusieurs gestionnaires AJAX à plusieurs endroits à l'intérieur du composant composite ? –

0

Ancien thread Je sais, mais vous pouvez le faire avec l'attribut client non-documentBehavior . Ce code mappe un événement keyup d'un h: inputText à un événement logique 'myevent'. Espérons que cela soit raisonnablement explicite.

index.xhtml

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:sqcc="http://java.sun.com/jsf/composite/sqcc" 
     xmlns:f="http://java.sun.com/jsf/core"> 
    <h:head> 
     <title>Facelet Title</title> 
    </h:head> 
    <h:body> 
     <h:form id="mainform" prependId="false"> 
      <sqcc:testcomp value="#{indexBean.inputText1}"> 
       <f:ajax render=":mainform:echo1"/> 
      </sqcc:testcomp> 
      <h:outputText id="echo1" value="a:#{indexBean.inputText1}"/> 
      <br/> 
     </h:form> 
    </h:body> 
</html> 

testcomp.xhtml

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<ui:component xmlns="http://www.w3.org/1999/xhtml" 
       xmlns:cc="http://java.sun.com/jsf/composite" 
       xmlns:h="http://java.sun.com/jsf/html" 
       xmlns:f="http://java.sun.com/jsf/core" 
       xmlns:ui="http://java.sun.com/jsf/facelets"> 

    <cc:interface> 
     <cc:attribute name="value"/> 
     <cc:clientBehavior name="myevent" default="true" event="keyup" targets="#{cc.clientId}:ccinput"/> 
    </cc:interface> 

    <cc:implementation> 
     <h:outputLabel for="#{cc.clientId}:ccinput" value="Input: "/> 
     <h:inputText id="ccinput" value="#{cc.attrs.value}" 
        autocomplete="off"> 
      <f:ajax event="keyup" render="#{cc.clientId}:ccoutput"/> 
     </h:inputText> 
     <h:outputText id="ccoutput" value="cc:#{cc.attrs.value}"/> 
    </cc:implementation> 
</ui:component> 

IndexBean.java

package testAjaxCC; 


import java.io.Serializable; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 

@ManagedBean 
@ViewScoped 
public class IndexBean implements Serializable { 

    private String inputText1; 
    private String inputText2; 

    public IndexBean() { 
    } 

    public String getInputText1() { 
     return inputText1; 
    } 

    public void setInputText1(String inputText1) { 
     this.inputText1 = inputText1; 
    } 

    public String getInputText2() { 
     return inputText2; 
    } 

    public void setInputText2(String inputText2) { 
     this.inputText2 = inputText2; 
    } 

}