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

Tapestry Java Discussion :

Changer dynamiquement background color


Sujet :

Tapestry Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2009
    Messages : 238
    Par défaut Changer dynamiquement background color
    Bonjour a tous (et a toutes)

    Alors voila, en fait tout est dans le titre ^^ je cherche à changer dynamiquement la valeur background color dans des balises <div>.

    Voici l'essai que j'ai tenté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		<div t:type="loop" t:source="instanceList" t:value="instances">
    		  <div id="Liste" t:source="instanceState" t:value="color" style="background-color: $(color)">
     
    		  			${instances.nomInstance}
    		  	</div></div>
    		</div>

    Mais (assez logiquement) ça ne marche pas...

    Avez vous une idée de comment je pourrais procéder?

    Merci d'avance!!!

    Edit : après avoir essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <div t:type="loop" t:source="instanceList" t:value="instances">
    		  	<div id="Liste" t:source="instanceState" t:value="color" style=$(color)>
     
    		  			${instances.nomInstance}
    		  	</div>
    		  </div>
    Ou mes fonctions instanceState et instanceList son :

    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
    public List<Instances> getInstanceList()
    	{
    		try {
    			return (List<Instances>) instanceManager.sortAll();
    		} catch (BusinessException e) {
     
    			e.printStackTrace();
    			return null;
    		} catch (TechnicalException e) {
     
    			e.printStackTrace();
    			return null;
    		} 
    	}
     
    	public String getInstanceState()
    	{
    		InstanceService service = new InstanceService(); 
    		color = "background-color: ";
    		color = color + service.instanceState(instances.getIdAo());
    		return color;
    	}
    J'obtient le message d'erreur suivant :

    Failure parsing template classpath:com/applira/web/pages/common/Accueil.tml: Unexpected character '$' (code 36) in start tag Expected a quote at [row,col {unknown-source}]: [23,68]
    Donc apparemment il aime pas trop les variables à l'intérieur d'un div... Mais je ne vois malheureusement pas trop comment procéder autrement...

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 28
    Par défaut
    Salut,

    Dans le .java utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @Property
    private String color;
    dans le .tml

    C'est plutot ${} et non $()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    style="background-color: ${color}">
    Cordialement,

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2009
    Messages : 238
    Par défaut
    Hey!!

    Effectivement j'avais oublié les accolades et mis des parenthèses à la place... bouletterie quand tu nous tient (surtout que j'ai fait la même erreur ya pas longtemps, résolue en 30 sec...)

    Bon toujours est-il que ça ne me ressort plus de messages d'erreurs c'est déjà un progrès ^^

    par contre ma couleur de fond ne change pas, même quand je défini color manuellement dans ma fonction getInstanceState (au cas ou l'erreur viendrais des fonctions de traitements j'ai testé.. mais non, aucun changement)

    Alors que lorsque que je rentre manuellement la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    style="background-color: red"
    la aucun problème le fond est bien rouge.

    Des idées sur ce qui pourrait provoquer cela?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 28
    Par défaut
    Salut,

    J'ai effectué le test hier avec une différence la couleur était en hexa, je ne sais pas si c'est important.
    Et j'ai laissé la syntax comme dans cet exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    style="background-color: ${color}">
    Par contre peut etre quand utilisant ton comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    style="background-color: ${getInstance()}">
    Fais le comme dans cet exemple le background-color dans le tml, et utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public String getInstanceState()
    	{
    		InstanceService service = new InstanceService(); 
    		color = service.instanceState(instances.getIdAo());
    		return color;
    	}
    Cordialement,

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2009
    Messages : 238
    Par défaut
    Yep ça marche !!! il fallait mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    style="background-color: ${getInstanceState()}">
    car d'après ce que j'ai pu comprendre, étant donné que je n'avais pas de t:type dans mon div, il n'appelais pas la fonction getInstanceState. Parfait!!


    Dernière petite question (promis j'arrête après ^^) c'est sur les beans springs :

    J'utilise les annotations pour injecter mes beans dans mes pages :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @Inject
    @Service("monBean")
    private MonBean monBean;
    Et pas de problèmes pour ce qui est des classes java liées aux .tml, l'injection marche très bien.

    Par contre lorsque j'essaye d'utiliser ces annotations dans mes services (inclus dans le même projets bien sur) j'ais l'impression que ça ne passe pas car ça me ressort un nullpointeurexception lorsque je tente de les utiliser.

    Est-ce normal? Et surtout existe-t-il une autre méthode pour injecter ses beans?

    Merci en tout cas de ton aide tu me fait gagner énormément de temps ^^

    edit : après un petit coup de débugage il apparait effectivement que mon bean n'est pas instancié.... voici la classe de service :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    package com.applira.web.service;
     
    import java.util.List;
     
    import org.apache.tapestry5.annotations.Service;
    import org.apache.tapestry5.ioc.annotations.Inject;
     
    import com.applira.common.exception.BusinessException;
    import com.applira.common.exception.TechnicalException;
    import com.applira.domain.model.Bornes;
    import com.applira.service.borne.BorneManager;
     
    /**
     * @author A184062
     * 
     */
    public class BorneService {
     
    	@Inject
    	@Service("borneManager")
    	private BorneManager borneManager;
     
    	private IsoMsgService service;
     
    	/**
             * Service retournant l'état de l'ensemble des bornes d'une instance en
             * parcourant tous les messages envoyés par ces bornes. Fonctionnement :<br/>
             * - Si une borne est "red", on renvoie tout de suite "red" pas la peine de
             * tester ce qui suit. <br/>
             * - Si la couleur courante est "green" on lui affecte automatiquement la
             * couleur de la borne courante.<br/>
             * - Si la couleur courante est "orange", on lui affecte la couleur de la
             * borne courante si celle-ci n'est pas "green".<br/>
             * 
             * @param id
             * @return Chaîne de caractères indiquant la couleur à afficher
             */
    	public String borneState(long id) {
    		List<Bornes> bornes = null;
    		service = new IsoMsgService();
    		String color = "green";
    		try {
    			bornes = (List<Bornes>) borneManager.findByIdAo(id);
    		} catch (BusinessException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (TechnicalException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		for (Bornes borne : bornes) {
    			String colorBorne = service.borneStateForInstance(borne.getId());
    			if (color == "green") {
     
    				color = colorBorne;
    			} else if (color == "orange") {
    				if (colorBorne != "green") {
    					color = colorBorne;
    				}
    			} else if (color == "red") {
    				return color;
    			}
     
    		}
    		return color;
    	}
    }
    Sachant que tout les imports autres que com.applira.web proviennent d'un autre projet compilé en .jar et ajouté au classpath.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2009
    Messages : 238
    Par défaut
    Problème résolue !!!!

    en fait je n'avais tout simplement pas déclaré mes services tapestry dans appModule comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class AppModule {
    	 public static void bind(ServiceBinder binder){
    		 binder.bind(IsoMsgService.class, IsoMsgServiceImpl.class);
    		 binder.bind(BatchMsgService.class, BatchMsgServiceImpl.class);
    		 binder.bind(BorneService.class, BorneServiceImpl.class);
    		 binder.bind(BatchService.class, BatchServiceImpl.class);
    		 binder.bind(ServeurService.class, ServeurServiceImpl.class);
    		 binder.bind(InstanceService.class, InstanceServiceImpl.class);
    	 }
    }
    Maintenant avec les annotations qui vont biens aucun problème.

    Et merci pour ton aide!!!

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

Discussions similaires

  1. [WPF] DatePicker Changer le background color
    Par BenoitM dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 26/10/2012, 13h01
  2. JXTreeTable changer le background/foreground color
    Par DevForFun dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 02/01/2012, 23h28
  3. Changer dynamiquement background-image
    Par JCMANSION dans le forum ASP.NET
    Réponses: 20
    Dernier message: 21/10/2010, 12h00
  4. Réponses: 10
    Dernier message: 30/07/2008, 15h08
  5. Changer dynamiquement la position des onglets
    Par ginnovy dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/09/2002, 18h24

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