Hola, bueno he conseguido hacer lo que pretendia asi que aqui os dejo como lo he solucionado por si alguien puede aprovecharse.
Como comentaba, tengo una propiedad de tipo texto pero múltiple. Lo que me interesaba es que al verse en la vista detalles, esta propiedad no apareciera listada por comas, si no en saltos de línea. Lo he solucionado creandome una clase Generator y una clase Renderer, la cual genera la vista de la propiedad como una tabla, y sus valores en columnas.
Primero, crear una clase MinuteListGenerator (le he puesto este nombre porque lo que voy a listar son puntos de un orden del dia contenidos en un video, por lo que en la vista tendre: Minuto - Punto del Orden del Dia - Descripcion):
package com.ambiser.web.bean.generator;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import org.alfresco.web.app.servlet.FacesHelper;
import org.alfresco.web.bean.generator.TextFieldGenerator;
import org.alfresco.web.ui.common.ComponentConstants;
import org.alfresco.web.ui.repo.component.property.PropertySheetItem;
import org.alfresco.web.ui.repo.component.property.UIProperty;
import org.alfresco.web.ui.repo.component.property.UIPropertySheet;
import com.ambiser.util.Constants;
public class MinuteListGenerator extends TextFieldGenerator{
protected UIComponent createComponent(FacesContext context, UIPropertySheet propertySheet, PropertySheetItem item){
UIComponent component = null;
if(item instanceof UIProperty){
if(!propertySheet.inEditMode()){
component = generate(context, item.getName());
}
}
else component = super.generate(context, item.getName());
return component;
}
public UIComponent generate(FacesContext context, String id){
UIComponent component = context.getApplication().createComponent(ComponentConstants.JAVAX_FACES_OUTPUT);
component.setRendererType(Constants.MINUTE_LIST_DISPLAY_RENDERER);
FacesHelper.setupComponentId(context, component, id);
return component;
}
}
Fijaros que la clase Constants es una clase definida por mi para poner valores propios, en este caso MINUTE_LIST_DISPLAY_RENDERER contendra la ruta de la clase con el Renderer.
Despues creamos la clase MinuteListRenderer:
package com.ambiser.web.ui.extension.renderer;
import java.io.IOException;
import java.util.ArrayList;
import javax.faces.component.UIComponent;
import javax.faces.component.ValueHolder;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import org.alfresco.web.ui.common.renderer.BaseRenderer;
public class MinuteListRenderer extends BaseRenderer {
public void encodeEnd (FacesContext context, UIComponent component) throws IOException{
if(component.isRendered()==false) return;
ResponseWriter out = context.getResponseWriter();
//Para recoger los valores de la propiedad, los extraigo de la siguiente manera, como un ArrayList
ArrayList list = (ArrayList)((ValueHolder)component).getValue();
//Ahora solo me queda recorrer el ArrayList, ir extrayendo valores y generando la respuesta
out.write("<table border='0'>");
out.write("<tr><td><b>Tiempo</b></td><td width='3'></td><td><b>Punto</b></td><td width='3'></td><td><center><b>Descripcion</b></center></td></tr>");
//En mi caso, las lineas van a ser del tipo: <mark>Minuto</mark><id>Punto</id><desc>Descripcion</desc>
for(int i=0;i<list.size();i++){
String linea = list.get(i).toString();
linea = linea.substring(linea.indexOf("<mark>")+6);
out.write("<tr><td>"+linea.substring(0,linea.indexOf("</mark>"))+"</td><td></td>");
linea = linea.substring(linea.indexOf("<id>")+4);
out.write("<td>"+linea.substring(0,linea.indexOf("</id>"))+"</td><td></td>");
linea = linea.substring(linea.indexOf("<desc>")+6);
out.write("<td>"+linea.substring(0,linea.indexOf("</desc>"))+"</td></tr>");
}
out.write("</table>");
}
}
Por ultimo, un par de detalles, en la clase Constans que os comentaba, escribo:
package com.ambiser.util;
public class Constants {
public static final String MINUTE_LIST_DISPLAY_RENDERER = "com.ambiser.faces.MinuteListRenderer";
}
En el faces-config-custom.xml añado el bean correspondiente y el renderer-kit:
<managed-bean>
<description>Bean to list minutaje values</description>
<managed-bean-name>MinuteListGenerator</managed-bean-name>
<managed-bean-class>com.ambiser.web.bean.generator.MinuteListGenerator</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<render-kit>
<renderer>
<component-family>javax.faces.Output</component-family>
<renderer-type>com.ambiser.faces.MinuteListRenderer</renderer-type>
<renderer-class>com.ambiser.web.ui.extension.renderer.MinuteListRenderer</renderer-class>
</renderer>
</render-kit>
Y por ultimo en el property-sheet del Aspecto que he creado, en el archivo web-client-config-custom.xml, a la hora de mostrar la propiedad, le añado el component-generator:
<config evaluator="aspect-name" condition="amb:video">
<property-sheet>
<separator name="sep" display-label-id="detalles_video" component-generator="LabelSeparatorGenerator"/>
<show-property name="amb:fecha" display-label-id="fecha" show-in-edit-mode="false"/>
<show-property name="amb:horainicio" display-label-id="horainicio" show-in-edit-mode="false"/>
<show-property name="amb:horafin" display-label-id="horafin" show-in-edit-mode="false"/>
===> <show-property name="amb:minutaje" display-label-id="minutaje" component-generator="MinuteListGenerator" show-in-edit-mode="false"/> <===
<show-association name="amb:intervinientes" display-label-id="intervinientes" component-generator="IntervinientesGenerator"/>
</property-sheet>
</config>
En fin, creo que eso es todo, al final me muestra los valores de la propiedad una bonita tabla. Facil, divertido y para toda la familia jeje. Si alguien necesita cualquier aclaracion, o cualquier duda, adelante, a preguntar.
Un saludo al foro!!