2017-01-24 3 views
1

je l'exigence suivante dans une application XPages:Obtenir la valeur de sélection dans le groupe de bouton radio XPages par SSJS

J'ai un groupe de boutons radio avec deux options. J'ai une liste déroulante dont les valeurs seront calculées à partir de l'option choisie dans le groupe de boutons radio. Les options seront calculées à partir de l'actualisation partielle de la liste déroulante associée à l'événement onChange du bouton radio.

Mon problème est que je n'ai pas pu obtenir la valeur sélectionnée sur le bouton radio pour monter les options de la liste déroulante. Comme je fais l'assemblage via SSJS, je dois obtenir la valeur sélectionnée sur le bouton radio aussi dans SSJS. Y a-t-il un composant/une méthode sur xpages dont je peux obtenir la valeur sélectionnée?

Je sais que via le composant RPC ou jquery coould obtenir via CSJS la valeur sélectionnée, mais je voulais seulement utiliser SSJS.

Grateful

Knut,

J'ai fait un exemple en fonction de votre suggestion, selon le code ci-dessous, mais cela n'a pas fonctionné. Car?

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"> 
<xp:radioGroup id="radioGroup2"> 
    <xp:selectItem itemLabel="a"></xp:selectItem> 
    <xp:selectItem itemLabel="b"></xp:selectItem> 
    <xp:selectItem itemLabel="c"></xp:selectItem> 
    <xp:eventHandler 
     event="onclick" 
     submit="true" 
     refreshMode="partial" refreshId="computedField2" execMode="partial" execId="radioGroup2"> 
    </xp:eventHandler></xp:radioGroup> 
<xp:text 
    escape="true" 
    id="computedField2" 
    value="#{javascript:getComponent('radioGroup2').getValue()}"> 
</xp:text><xp:br></xp:br><xp:br></xp:br> 
</xp:view> 

Répondre

0

Utilisez

getComponent('radioGroup1').getValue() 

Remplacer "radioGroup1" avec votre de groupe de boutons radio id.

Voici un exemple:

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view 
    xmlns:xp="http://www.ibm.com/xsp/core"> 
    <xp:radioGroup 
     id="radioGroup1" 
     value="#{viewScope.radio}"> 
     <xp:selectItem itemLabel="a" /> 
     <xp:selectItem itemLabel="b" /> 
     <xp:eventHandler 
      event="onclick" 
      submit="true" 
      refreshMode="partial" 
      refreshId="checkBoxGroup1" execMode="partial" execId="radioGroup1"> 
     </xp:eventHandler> 
    </xp:radioGroup> 
    <xp:br></xp:br> 
    <xp:checkBoxGroup 
     id="checkBoxGroup1" 
     value="#{viewScope.check}"> 
     <xp:selectItems> 
      <xp:this.value><![CDATA[#{javascript: 
       if (!getComponent('radioGroup1').getValue()) { 
        return []; 
       } 
       if (getComponent('radioGroup1').getValue() == 'a') { 
        return ['A1', 'A2']; 
       } 
       return ['B1', 'B2']; 
      }]]></xp:this.value> 
     </xp:selectItems> 
    </xp:checkBoxGroup> 
</xp:view> 

Au lieu de getComponent('radioGroup1').getValue() vous pouvez utiliser viewScope.radio comme la valeur de la radio est stockée dans l'affichage des variables de portée dans cet exemple.

+0

Ceci j'ai essayé et cela n'a pas fonctionné. Dans le code SSJS de la liste déroulante, la valeur renvoyée est null. Dois-je utiliser cette valeur dans l'événement Onchage du bouton radio et l'associer à une variable d'étendue? –

+0

Il doit figurer dans le code d'actualisation partielle de la liste déroulante où vous calculez les éléments selectItems. –

+0

Pourriez-vous donner un exemple d'exemple de code? –

0

J'ai fait similiar en utilisant un getComponent ("RadioButtonGroup1"). GetValue() dans les valeurs calculées pour la liste déroulante. Ou vous pouvez utiliser ceci:.

this.getParent() getValue()

dans le onChange pour remplir une variable scope que vous basez votre combobox avec.

+0

Salut, ça a marché! Mais comment pourrais-je le faire sans utiliser une variable scope? J'en utilise déjà beaucoup et je voulais éviter de créer plus en raison de problèmes de performance. –

+0

L'utilisation de getComponent peut être bien pire qu'un tueur de performance. vous voudrez peut-être lire ceci (comme toujours) une bonne explication d'un de nos gourous: http://avatar.red-pill.mobi/tim/blog.nsf/d6plinks/TTRY-942UPQ –

+0

Aussi, si vous utilisez requestScope, c'est la vie est très courte. Parce que le composant est sur la page, il est accessible pour chaque demande. Mais peu importe si vous le stockez dans requestScope ou viewScope, l'impact sur les performances de l'enregistrement d'une chaîne sera minime. –