Jahia en Français > (weakreference,choicelist[scri...

0 (0 Good)
0 (0 Bad)

(weakreference,choicelist[script= ... ]) incapable de le faire fonctionner.

by  rmorin »  2012/10/10 20:40

Bonjour,
j'ai une liste à peupler avec des éléments en provenance de d'autres pages du site. Ces éléments sont réparti sur plusieurs pages de façon éparse. Ces regroupements ne peuvent être fait de façon aumatique (les éléments seront inséré dans plusieurs listes). 

genre de liste finale que je vais avoir:

List_1

Element_A
Element_W
Element_R

 

 

 

List_2
Element_G
Element_K
Element_R

Pour revenir au début voici la structure de donnée que je me suis créé pour représenter ce cas (.cnd)

 

[jnt:element] > jnt:content, jmix:editorialContent, jmix:structuredContent
...
 
[jnt:myElementList] > jnt:content, jmix:list, jmix:listContent
+ * (jnt:myElementReference) = jnt:myElementReference
 
[jnt:myElementReference] > jnt:content, jmix:nodeReference, jmix:editorialContent
 - element (weakreference,choicelist[script=getElementList.groovy]) mandatory < jnt:element
 

Pour le code à mettre dans mon getElementList... c'est là que ça se gâte et j'aurais bien aimé avoir un exemple. En premier mon script ne semble pas être exécuté. Ceci est en partant un problème... pourtant j'ai bien respecté le contenu de la documentation. Ensuite, je suis pas certain de comment mon ChoiceListValue doit être implémenté...

voici le code groovy si ça aide:

 
import java.util.*
 
import javax.jcr.*
import javax.jcr.query.*
import org.jahia.services.content.nodetypes.initializers.ChoiceListValue;
import org.jahia.services.content.nodetypes.ValueImpl;
 
import org.jahia.services.content.*
 
def returnedList = JCRTemplate.getInstance().doExecuteWithSystemSession(new JCRCallback<Integer>() {
    public Object doInJCR(JCRSessionWrapper session) throws RepositoryException {
        
def nodeList = new ArrayList<ChoiceListValue>();
 
        for (NodeIterator moduleIterator = session.getWorkspace().getQueryManager()
                        .createQuery("SELECT * FROM [jnt:element]",
                                Query.JCR_SQL2).execute().getNodes(); moduleIterator.hasNext();) {
            JCRNodeWrapper nodeWrapper = (JCRNodeWrapper) moduleIterator.nextNode();
//nodeList.add(new ChoiceListValule(nodeWrapper.getName(),nodeWrapper.getIdentifier()));<
nodeList.add(new ChoiceListValue(nodeWrapper.getName(),null,new ValueImpl(nodeWrapper.getIdentifier(),PropertyType.REFERENCE,false)));
 
        }
return nodeList;
    }
});
 
 
return returnedList;
 
testé dans la console groovy ce code marche... 
vous avez des exemple? une idée du problème?
merci.

Rémi Morin
  • (weakreference,choicelist[script= ... ]) incapable de le faire fonctionner.
    2012/10/10 20:40

    rmorin <p> Bonjour,<br /> j&#39;ai une liste &agrave; peupler avec des &eacute;l&eacute;ments en provenance de d&#39;autres pages du site. Ces &eacute;l&eacute;ments sont r&eacute;parti sur plusieurs pages de fa&ccedil;on &eacute;parse. Ces regroupements ne peuvent &ecirc;tre fait de fa&ccedil;on aumatique (les &eacute;l&eacute;ments seront ins&eacute;r&eacute; dans plusieurs listes).&nbsp;</p> <p> genre de liste finale que je vais avoir:</p> <p> List_1</p> <p> Element_A<br /> Element_W<br /> Element_R</p> <div> <div> <div> <div> <div> &nbsp;</div> </div> </div> </div> </div> <p> &nbsp;</p> <p> &nbsp;</p> <p> List_2<br /> Element_G<br /> Element_K<br /> Element_R</p> <div> <div> Pour revenir au d&eacute;but voici la structure de donn&eacute;e que je me suis cr&eacute;&eacute; pour repr&eacute;senter ce cas (.cnd)</div> </div> <p> &nbsp;</p> <div> [jnt:element] &gt; jnt:content, jmix:editorialContent, jmix:structuredContent<span class="Apple-tab-span" style="white-space:pre"> </span></div> <div> ...</div> <div> &nbsp;</div> <div> [jnt:myElementList] &gt; jnt:content, jmix:list, jmix:listContent</div> <div> + * (jnt:myElementReference) = jnt:myElementReference</div> <div> &nbsp;</div> <div> [jnt:myElementReference] &gt; jnt:content, jmix:nodeReference, jmix:editorialContent</div> <div> &nbsp;- element (weakreference,choicelist[script=getElementList.groovy]) mandatory &lt; jnt:element</div> <div> &nbsp;</div> <p> Pour le code &agrave; mettre dans mon getElementList... c&#39;est l&agrave; que &ccedil;a se g&acirc;te et j&#39;aurais bien aim&eacute; avoir un exemple. En premier mon script ne semble pas &ecirc;tre ex&eacute;cut&eacute;. Ceci est en partant un probl&egrave;me... pourtant j&#39;ai bien respect&eacute; le contenu de la documentation. Ensuite, je suis pas certain de comment mon ChoiceListValue doit &ecirc;tre impl&eacute;ment&eacute;...<br /> <br /> voici le code groovy si &ccedil;a aide:</p> <div> &nbsp;</div> <div> import java.util.*</div> <div> &nbsp;</div> <div> import javax.jcr.*</div> <div> import javax.jcr.query.*</div> <div> import org.jahia.services.content.nodetypes.initializers.ChoiceListValue;</div> <div> import org.jahia.services.content.nodetypes.ValueImpl;</div> <div> &nbsp;</div> <div> import org.jahia.services.content.*</div> <div> &nbsp;</div> <div> def returnedList = JCRTemplate.getInstance().doExecuteWithSystemSession(new JCRCallback&lt;Integer&gt;() {</div> <div> &nbsp; &nbsp; public Object doInJCR(JCRSessionWrapper session) throws RepositoryException {</div> <div> &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div> <div> def nodeList = new ArrayList&lt;ChoiceListValue&gt;();</div> <div> &nbsp;</div> <div> &nbsp; &nbsp; &nbsp; &nbsp; for (NodeIterator moduleIterator = session.getWorkspace().getQueryManager()</div> <div> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .createQuery(&quot;SELECT * FROM [jnt:element]&quot;,</div> <div> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Query.JCR_SQL2).execute().getNodes(); moduleIterator.hasNext();) {</div> <div> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JCRNodeWrapper nodeWrapper = (JCRNodeWrapper) moduleIterator.nextNode();</div> <div> //nodeList.add(new ChoiceListValule(nodeWrapper.getName(),nodeWrapper.getIdentifier()));&lt;</div> <div> nodeList.add(new ChoiceListValue(nodeWrapper.getName(),null,new ValueImpl(nodeWrapper.getIdentifier(),PropertyType.REFERENCE,false)));</div> <div> &nbsp;</div> <div> &nbsp; &nbsp; &nbsp; &nbsp; }</div> <div> return nodeList;</div> <div> &nbsp; &nbsp; }</div> <div> });</div> <div> &nbsp;</div> <div> &nbsp;</div> <div> return returnedList;</div> <div> &nbsp;</div> <div> test&eacute; dans la console groovy ce code marche...&nbsp;<br /> vous avez des exemple? une id&eacute;e du probl&egrave;me?<br /> merci.<br /> <br /> R&eacute;mi Morin</div>

  • Number of messages  3
    Registration date Oct 10, 2012
    0 (0 Good)
    0 (0 Bad)

    Re: (weakreference,choicelist[script= ... ]) incapable de le faire fonctionner.

    by  rmorin »  2012/10/11 15:41

    Bonjour moi même.

    Mon groovy n'était pas exécuté parce qu l'élément de ma liste (jnt:myElementReference) n'avait pas de .jsp, et le path à chercher pour le script est extrait à partir de l'emplacement de ce jsp voir ScriptChoiceListInitializerImpl 

    la partie:


                    final Set<JahiaTemplatesPackage> forModule = ServicesRegistry.getInstance().getJahiaTemplateManagerService().getAvailableTemplatePackagesForModule(
                            JCRContentUtils.replaceColon(epd.getDeclaringNodeType().getName()));

    le set retourné était vide, donc il cherchait pas mon script. Donc pour cette partie là ça va. J'ai créée un .jsp et ça marche...

    je continue mon investigation pour tenter de faire fonctionner ça.
  • Re: (weakreference,choicelist[script= ... ]) incapable de le faire fonctionner.
    2012/10/11 15:41

    rmorin <p> Bonjour moi m&ecirc;me.<br /> <br /> Mon groovy n&#39;&eacute;tait pas ex&eacute;cut&eacute; parce qu l&#39;&eacute;l&eacute;ment de ma liste (<span style="color: rgb(102, 102, 102); font-family: 'Trebuchet MS', Trebuchet, 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif; font-size: 13px; line-height: 18px; ">jnt:myElementReference)&nbsp;</span>n&#39;avait pas de .jsp, et le path &agrave; chercher pour le script est extrait &agrave; partir de l&#39;emplacement de ce jsp voir&nbsp;ScriptChoiceListInitializerImpl&nbsp;<br /> <br /> la partie:</p> <br /> <div> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; final Set&lt;JahiaTemplatesPackage&gt; forModule = ServicesRegistry.getInstance().getJahiaTemplateManagerService().getAvailableTemplatePackagesForModule(</div> <div> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JCRContentUtils.replaceColon(epd.getDeclaringNodeType().getName()));</div> <div> <br /> le set retourn&eacute; &eacute;tait vide, donc il cherchait pas mon script. Donc pour cette partie l&agrave; &ccedil;a va. J&#39;ai cr&eacute;&eacute;e un .jsp et &ccedil;a marche...<br /> <br /> je continue mon investigation pour tenter de faire fonctionner &ccedil;a.</div>

  • Number of messages  3
    Registration date Oct 11, 2012
    0 (0 Good)
    0 (0 Bad)

    Re: Re: (weakreference,choicelist[script= ... ]) incapable de le faire fonctionner.

    by  rmorin »  2012/10/12 15:49

     

    Re-Bonjour moi même
    Pour faire suite à mes investigations.
    La partie groovy, la partie choiceList fonctionne. 
    Mon objet semble bien assigné si je vais dans le repository explorer ça marche mais je suis incapable d'afficher ma weakreference.

    J'essaie:

    <c:forEach items="${moduleMap.currentList}" var="subchild" begin="${moduleMap.begin}" end="${moduleMap.end}" varStatus="status">
            <jcr:nodeProperty node="${subchild}" name="element" var="myElementRef"/>
                 <c:set var="myElement" value="${myElementRef.node}"/><br/>
     
           nom = ${myElement.name} <br/>
           types = ${myElement.nodeTypes}<br/>
           test 1  <template:module path="${myElement.path}" view="default" editable="false"/><br/>
           test 2  <template:module node="${myElement}" view="default" editable="false"/><br/>
     
    <br/>
    </c:forEach>

    ça donne inmanquablement comme résultat:
    nom = nomDeLelement!!!
    types = [jnt:element, jmix:renderable, jmix:categorized]
    test 1 
    test 2 
     

    Donc le nom ça marche, et ça marche aussi avec tous les sous-champs de mon element, son type semble correct... je comprend pas vraiment ce qui se passe. Je suis incapable de faire afficher les vue sur cet élément. 

     
  • Re: Re: (weakreference,choicelist[script= ... ]) incapable de le faire fonctionner.
    2012/10/12 15:49

    rmorin <p> &nbsp;</p> <p> Re-Bonjour moi m&ecirc;me<br /> Pour faire suite &agrave; mes investigations.<br /> La partie groovy, la partie choiceList fonctionne.&nbsp;<br /> Mon objet semble bien assign&eacute; si je vais dans le repository explorer &ccedil;a marche mais je suis incapable d&#39;afficher ma weakreference.<br /> <br /> J&#39;essaie:</p> <div> &lt;c:forEach items=&quot;${moduleMap.currentList}&quot; var=&quot;subchild&quot;&nbsp;begin=&quot;${moduleMap.begin}&quot; end=&quot;${moduleMap.end}&quot; varStatus=&quot;status&quot;&gt;</div> <div> &nbsp; &nbsp; &nbsp; &nbsp; &lt;jcr:nodeProperty node=&quot;${subchild}&quot; name=&quot;element&quot; var=&quot;myElementRef&quot;/&gt;</div> <div> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;c:set var=&quot;myElement&quot; value=&quot;${myElementRef.node}&quot;/&gt;&lt;br/&gt;</div> <div> &nbsp;</div> <div> &nbsp; &nbsp; &nbsp; &nbsp;nom = ${myElement.name} &lt;br/&gt;</div> <div> &nbsp; &nbsp; &nbsp; &nbsp;types = ${myElement.nodeTypes}&lt;br/&gt;</div> <div> &nbsp; &nbsp; &nbsp; &nbsp;test 1 &nbsp;&lt;template:module path=&quot;${myElement.path}&quot; view=&quot;default&quot; editable=&quot;false&quot;/&gt;&lt;br/&gt;</div> <div> &nbsp; &nbsp; &nbsp; &nbsp;test 2 &nbsp;&lt;template:module node=&quot;${myElement}&quot; view=&quot;default&quot; editable=&quot;false&quot;/&gt;&lt;br/&gt;</div> <div> &nbsp;</div> <div> &lt;br/&gt;</div> <div> &lt;/c:forEach&gt;</div> <div> <br /> &ccedil;a donne inmanquablement comme r&eacute;sultat:<br /> <div> <div> nom = nomDeLelement!!!</div> <div> types = [jnt:element, jmix:renderable, jmix:categorized]</div> <div> test 1&nbsp;</div> <div> test 2&nbsp;</div> <div> &nbsp;</div> </div> <p> Donc le nom &ccedil;a marche, et &ccedil;a marche aussi avec tous les sous-champs de mon element, son type semble correct... je comprend pas vraiment ce qui se passe. Je suis incapable de faire afficher les vue sur cet &eacute;l&eacute;ment.&nbsp;</p> </div> <div> &nbsp;</div>

  • Number of messages  3
    Registration date Oct 12, 2012
    Contact
    Share
    Feedback

    Get in touch

    Whether you are a current user or if you are just evaluating Jahia, we are here to help.

    Contact us

    Share this page