IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Problème pour setter le inputText


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut Problème pour setter le inputText
    Salut,

    Voila mon problème, j'ai une datatable et un inputText. Quand je clique sur la datatable je voudrais passer la valeur sur laquelle j'ai cliqué à l'inputText. C'est aussi simple que ça

    Donc coté jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <ice:inputText id="idTxtFullNameAsset" value="#{bean.fullNameAsset}" />
    et coté bean j'aurais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.setFullNameAsset("Machin");

    Mais cette opération ne marche pas. Donc j'ai essayé de recherche à contourner cela et j'ai trouvé cette solution :

    Coté bean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    UIInput inputTextFullName = (UIInput)FacesContext.getCurrentInstance().getViewRoot().findComponent("popupForm:idTxtFullNameAsset");
     
     if ( inputTextFullName != null )
     {
     	inputTextFullName.setValue(asset.getName());
     	inputTextFullName.setSubmittedValue(null);
     }
     
     this.setFullNameAsset(asset.getName());
    Ils disent que ça marche très bien et il y a d'autres qu'ils l'en essayer avec succès. Sauf que ça marche pas chez moi !!!!

    Si ça peut servir je peux vous mettre ma Jspx !

    Est ce qu'il y a quelqu'un qui a déja eu ce genre de problème ? Et comment à votre avis, je pourrais setter le inputText

    Merci pour votre aide.

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    t as pas oublier le binding ?

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    Non, J'ai essayé aussi le binding pour faire cela mais ca marche pas.

    Moi ce que je comprends pas c'est pourquoi on pourrait pas setter le inputText, juste on passant une valeur à la value. Apparemment c'est pas une particularité de Icefaces ...

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    es-tu sur de passer dans ton code? Peut etre que ton action n'est pas appelée pour cause d'erreur de validation ou parce que la datatable a changé entre le rendu et l'action... Es tu sur que inputTextFullName n'est pas null? Aussi, il est assez rare d'avoir besoin de passer par ce genre de bidouille. Si ce que tu veux c'est éditer un "bean" en fonction de la ligne choisie, le mieux est dans l'action de créer ce bean à la bonne valeur en question et d'avoir l'inputText qui pointe sur ce bean tout simplement.

  5. #5
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    Salut merci pour vos reponses,

    Je vous explique ce que je fais pas à pas, comme ça si je fais une erreur quelques parts vous allez vous rendre compte.

    Quand je clique sur la dataTable sur le lien "Edit"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <ice:panelGroup style="text-align:center;">
         <ice:commandLink actionListener="#{bean.updateAssetManagers}">
                <ice:outputText value="Edit" />
         </ice:commandLink>
    </ice:panelGroup>
    Donc j'appelle la méthode updateAssetManagers la voila
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public void updateAssetManagers(ActionEvent event)
    	{
    		try
    		{
    			HtmlDataTable 	dataTable 	= (HtmlDataTable) event.getComponent().getParent().getParent().getParent();
    			AssetManagerBean 	asset 	= (AssetManagerBean)dataTable.getRowData();
     
    			UIInput inputTextFullName = (UIInput)FacesContext.getCurrentInstance().getViewRoot().findComponent("popupForm:idTxtFullNameAsset");
    			UIInput inputTextTraderId = (UIInput)FacesContext.getCurrentInstance().getViewRoot().findComponent("popupForm:idTxtTraderIdAsset");
     
    			if ( inputTextFullName != null )
    			{
    				inputTextFullName.setValue(asset.getName());
    				inputTextFullName.setSubmittedValue(null);
    			}
    			if ( inputTextTraderId != null )
    			{
    				inputTextTraderId.setValue(asset.getId());
    				inputTextTraderId.setSubmittedValue(null);
    			}
    		}
    		catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    Idéalement moi voila ce que je voudrais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public void updateAssetManagers(ActionEvent event)
    	{
    		try
    		{
    			HtmlDataTable 	dataTable 	= (HtmlDataTable) event.getComponent().getParent().getParent().getParent();
    			AssetManagerBean 	asset 	= (AssetManagerBean)dataTable.getRowData();
     
    			this.setFullNameAsset(asset.getName()); // C'est juste un string
                            this.setTraderIdAsset(asset.getId()); // aussi un simple string
    		}
    		catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    Et normalement avec cela mon inputText doit prendre les valeurs passées !!!
    voila mon inputText
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <ice:panelGrid columns="1" id="idPanelGridTxtAsset">
                                <ice:inputText id="idTxtFullNameAsset" value="#{bean.fullNameAsset}" partialSubmit="true"/>
     
                                <ice:inputText id="idTxtTraderIdAsset" value="#{bean.traderIdAsset}" partialSubmit="true"/>
                              </ice:panelGrid>
    Dite moi s'il y a quelques choses d'anormales ?

    Pour finir, il passe dans toutes les méthodes indiquées ci dessus. Il met à jour le composant. Ce que j'ai remarqué par contre c'est qu'après la mise à jour du composant, le programme repasse dans la méthode set avec un string "", alors que je ne lui fait appelle null part... et c'est la ou le inputText reprend la chaine vide

    voila le lien ou j'ai trouvé la soit disant solution au problème, elle marche apparemment pour tout le monde sauf moi :
    http://www.icefaces.org/JForum/posts/list/4179.page

    Merci

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    on dirait que tu essaie d'utiliser le action listener pour éviter d'avoir à utiliser un action, je me trompe? Tu dois vraiment préserver le reste du formulaire après l'action? Sinon, contente toi de simplement changer le bean et utilise un action qui fait revenir à la page actuelle, le formulaire sera alors recalculé. Exemple rapide et sans les détails


    un Bean X de session avec un liste de beans Y ainsi qu'avec une propriété selectedBean:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class X {
    //....
    List<Y> beans;
    Y selectedBean;
    // getters & setters
    // autres
    un datatable qui itère sur les beans, stockant le bean du row actuel dans "bean"
    dans chaque ligne un action qui pointe sur bean.selectMe();
    en dessous de la table, des champs qui pointent sur #{X.selectedBean.xxxx}

    et finalement ce code dans Y:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Y{
      // propriétés
      public String selectMe(){
         getX().setSelectedBean(this);
         return "new_y_Selected";
      }
    }
    Parce que, bidouiller le contenu des champs, perso je trouve pas çà toujours joli joli (je l'ai déjà fait mais plus proprement) car çà lie ton bean au design de la vue.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème pour setter une Foreign Key avec TopLink(ValueHolderInterface)
    Par Kcintim dans le forum Persistance des données
    Réponses: 1
    Dernier message: 19/06/2011, 11h40
  2. [fileupload] problème pour parser la requete
    Par jaimepasteevy dans le forum Struts 1
    Réponses: 12
    Dernier message: 24/04/2008, 12h02
  3. C/asm : problème pour link
    Par SteelBox dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 06/04/2004, 23h03
  4. Réponses: 3
    Dernier message: 29/08/2003, 10h57
  5. Problème pour récupérer la clé primaire
    Par caramel dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/04/2003, 13h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo