Cette conversation a été verrouillée en raison de son inactivité. Veuillez créer une nouvelle publication.
Niveau 1
Niveau 2
Se connecter à la communauté
Connectez-vous pour voir tous les badges
Cette conversation a été verrouillée en raison de son inactivité. Veuillez créer une nouvelle publication.
Hi Friends,
I wrote a function to getProperty of an node and set its for an other node.
Example: The property name: benefits , type: String[] , value: 1,2,5
When I view properties of a page, select the benefits and click Save button. It will get the benefits values and set for an other page.
The function as below work when I select only one benefits. But, It doesn't work when I select more than one benefits.
public void syncNode(ResourceChange change, String[] langCodes, String[] properties) {
try {
ResourceResolver resourceResolver = resolverFactory.getAdministrativeResourceResolver(null);
Session session = resourceResolver.adaptTo(Session.class);
Resource resourceProperty = resourceResolver.getResource(change.getPath());
for (String langCode : langCodes) {
String pathSyncProperties = getPathByLangCode(change.getPath(), langCode);
if (!pathSyncProperties.equals("") && findExistingPath(pathSyncProperties, session) != null) {
Node node = JcrUtil.createPath(pathSyncProperties, JcrConstants.NT_UNSTRUCTURED, session);
for (String property : properties) {
String propertyData = resourceProperty.getValueMap().get(property, String.class);
if (propertyData == null || property.equals("")) {
continue;
}
node.getProperty(property).getString();
node.setProperty(property, propertyData);
}
}
}
resourceResolver.commit();
} catch (Exception e) {
e.printStackTrace();
}
}
How I can set multiple values with setProperty for a node?
Please help me,
Thank you so much,
BienHV
Résolu ! Accéder à la solution.
Hi,
You need to set multiple value as array of Value Object
setProperty(java.lang.String name, Value[] values, int type)
Sets the multi-value property of this node called name to the specified array of values.
Node (Content Repository for Java Technology API Version 2.0)
Vues
Réponses
Nombre de J’aime
Hi,
You need to set multiple value as array of Value Object
setProperty(java.lang.String name, Value[] values, int type)
Sets the multi-value property of this node called name to the specified array of values.
Node (Content Repository for Java Technology API Version 2.0)
Vues
Réponses
Nombre de J’aime
can we set data in Value object? I have an arraylist<String> which needs to be set as multi-valued property. What is the best way for this?
I tried iterating it a loop but that adds only last value in arraylist.
As per this link, the below should work but it gave error -
class java.util.ArrayList cannot be cast to class javax.jcr.ValueString[] strings = new String[things.size()]; int idx = 0; for (T thing : things) { strings[idx++] = thing.toString(); } node.setProperty(property, strings);
Vues
Réponses
Nombre de J’aime
Thank you for your help,
I known what you share. But I don't know the value will set for "int type". Could you help me how to set in my code above to replace for the code line:
node.setProperty(property, propertyData);
Thank you so much,
BienHV
Vues
Réponses
Nombre de J’aime
Hi,
You can use another method where you don't need to explicitly specify type.
https://docs.adobe.com/docs/en/spec/jsr170/javadocs/jcr-2.0/javax/jcr/Property.htmlsetProperty(java.lang.String name, Value[] values)
The property type of the property will be that specified by the node type of this node. If the property type of one or more of the supplied Value objects is different from that required, then a best-effort conversion is attempted, according to an implemention-dependent definition of "best effort". If the conversion fails, a ValueFormatException is thrown.
Vues
Réponses
Nombre de J’aime
Thank you for your help,
My function work with the code as below:
public void syncNode(ResourceChange change, String[] langCodes, String[] properties) {
try {
ResourceResolver resourceResolver = resolverFactory.getAdministrativeResourceResolver(null);
Session session = resourceResolver.adaptTo(Session.class);
Resource resourceProperty = resourceResolver.getResource(change.getPath());
for (String langCode : langCodes) {
String pathSyncProperties = getPathByLangCode(change.getPath(), langCode);
if (!pathSyncProperties.equals("") && findExistingPath(pathSyncProperties, session) != null) {
Node node = JcrUtil.createPath(pathSyncProperties, JcrConstants.NT_UNSTRUCTURED, session);
for (String property : properties) {
String[] propertyData = resourceProperty.getValueMap().get(property, String[].class);
if (propertyData == null || property.equals("")) {
continue;
}
node.setProperty(property, propertyData, 1); //PropertyType. to know int type
}
}
}
resourceResolver.commit();
} catch (Exception e) {
e.printStackTrace();
}
}
Vues
Réponses
Nombre de J’aime
Hi,
Yes, you can check property type at Constant Field Values (Content Repository for Java Technology API Version 2.0)
Vues
Réponses
Nombre de J’aime
Thanks you.
Vues
Réponses
Nombre de J’aime
Vues
Likes
Réponses
Vues
Likes
Réponses
Vues
Likes
Réponses
Vues
Likes
Réponses