Fórum

Recorrer elementos de una estructura concreta desde portlet

Israel Fernández, modificado 12 Anos atrás.

Recorrer elementos de una estructura concreta desde portlet

New Member Postagens: 8 Data de Entrada: 30/01/12 Postagens Recentes
Buenas, soy nuevo en esto del Liferay y estoy aprendiendo un poco a marchas forzadas.
He creado un nuevo portlet, y pretendo que se muestren 2 listados, uno de noticias y otro de eventos.
Tengo una estructura para los eventos y otra para las noticias, y he creado contenidos web asociados a cada una de las estructuras.

¿Hay alguna forma de que pueda recorrer los elementos de una estructura concreta y 'pintarlos' en mi portlet?
Si no es posible, supongo que podría hacerlo por etiquetas, pero ¿hay alguna forma de que pueda recorrer los elementos que tengan una etiqueta concreta y 'pintarlos' en mi portlet?

Muchas gracias
Oriol Canalias, modificado 12 Anos atrás.

RE: Recorrer elementos de una estructura concreta desde portlet

Regular Member Postagens: 139 Data de Entrada: 19/10/09 Postagens Recentes
Hola,
Si te has creado las plantillas, me parece que las funciones de liferay ya te devuelven la plantilla aplicada a la estructura. Por ejemplo:
<%
		
	long id = Long.parseLong(request.getParameter("id"));
	JournalArticle noticia =JournalArticleLocalServiceUtil.getArticle(id);

	JournalArticleDisplay articleDisplay = JournalContentUtil.getDisplay(
		noticia.getGroupId(), noticia.getArticleId(), 
		noticia.getTemplateId(), "", themeDisplay.getLanguageId(),
		themeDisplay);

%>
<%=articleDisplay.getContent() %>


Si lo que quieres es recoger un elemento concreto lo puedes hacer así:
	public static String getContingutElement(String idioma,String camp, String contingut){
		Document contentDoc = null;
		
		if (Validator.isNotNull(contingut)) {
			try {
				contentDoc = SAXReaderUtil.read(contingut);

				List<element> elSiblings = null;
				List<element> contentElements = contentDoc.getRootElement().elements();
				
				for (Element contentElement : contentElements) {
					if (camp.equals(contentElement.attributeValue("name", StringPool.BLANK))) {
						elSiblings = _getSiblings(contentDoc.getRootElement(), camp);

						break;
					}
				}
				if(elSiblings != null){
					Element contentElement = elSiblings.get(0);
					String elContent = GetterUtil.getString(contentElement.elementText("dynamic-content"));
					return elContent;
				}
				
			}
			catch (Exception e) {
				contentDoc = null;
			}
		}

		return "";
	}

	private static List<element> _getSiblings(Element element, String name) {
		List<element> elements = new ArrayList<element>();

		Iterator<element> itr = element.elements().iterator();

		while (itr.hasNext()) {
			Element curElement = itr.next();

			if (name.equals(curElement.attributeValue("name", StringPool.BLANK))) {
				elements.add(curElement);
			}
		}

		return elements;
	}
</element></element></element></element></element></element>


Más o menos. Espero haber sido de ayuda.

Saludos,

Oriol
Israel Fernández, modificado 12 Anos atrás.

RE: Recorrer elementos de una estructura concreta desde portlet

New Member Postagens: 8 Data de Entrada: 30/01/12 Postagens Recentes
Gracias Oriol, he probado lo que me dices, pero me da error en la línea "JournalArticle noticia =JournalArticleLocalServiceUtil.getArticle(id);", me dice: "JournalArticle cannot be resolved to a type". Supongo que tendré que incluir alguna cabecera.

De todas formas, creo que no me he explicado bien. Intento hacerlo mejor.
Lo que tengo es un portlet cuya página "view.jsp" es algo así (he eliminado estilos para hacerlo más comprensible):

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>

<portlet:defineObjects />
<div>
<div>
<h2>Eventos</h2>
<ul>
...
<li>EVENTO 1</li>
<li>EVENTO 2</li>
<li>EVENTO 3</li>
...

</ul>
</div>
<div>
<h2>Noticias</h2>
<ul>
...
<li>NOTICIA 1</li>
<li>NOTICIA 2</li>
<li>NOTICIA 3</li>
...

</ul>
</div>
</div>


Los eventos y noticias son falsos (obviamente).

Mis noticias y eventos tienen una estructura con un campo flag "portada" que me condiciona que se muestre en el listado o no. Es decir, si la bandera (flag) está marcada, deberá mostrarse en el listado, en otro caso, no.

He realizado esta página como un portlet, y no tiene plantilla asociada, porque se refiere a 2 estructuras distintas.

Para resumir, supongamos que las estructuras son:
- NOTICIA:
> "portada": flag para determinar si se muestra en el listado.
> "titulo": texto a mostrar en el listado.
- EVENTO:
> "portada": flag para determinar si se muestra en el listado.
> "titulo": texto a mostrar en el listado.

¿Hay alguna forma de que pueda recorrer todos los elementos creados con las estructuras "NOTICIA" y "EVENTO" que tengan el campo portada activo y 'pintarlos' en mi portlet (cada uno en su columna)?
Oriol Canalias, modificado 12 Anos atrás.

RE: Recorrer elementos de una estructura concreta desde portlet (Resposta)

Regular Member Postagens: 139 Data de Entrada: 19/10/09 Postagens Recentes
Como te comentaba en la respuesta anterior, la segunda parte del código que te he puesto, serviria para recoger un campo concreto de la estructura (en tu caso la bandera de portada). Debes añadir ese código a una clase y llamar a los métodos desde la jsp.

Saludos,

Oriol
Israel Fernández, modificado 12 Anos atrás.

RE: Recorrer elementos de una estructura concreta desde portlet

New Member Postagens: 8 Data de Entrada: 30/01/12 Postagens Recentes
Muchas gracias Oriol, por la ayuda prestada, ya funcionó. En lugar de hacer un portlet nuevo, he modificado el listado de contenido web ^^
thumbnail
Carlos Zela, modificado 11 Anos atrás.

RE: Recorrer elementos de una estructura concreta desde portlet

New Member Postagens: 2 Data de Entrada: 13/06/12 Postagens Recentes
Hola Oriol, entiendo que lo que has simulado es el metodo getSiblings() que tiene velocity, mi problema esta en que necesito simular el metodo getChildren() , me serviria de mucho poder saber si ya tienes un metodo en java que resuelva lo mencionado.

Gracias
thumbnail
Jorge Pérez, modificado 9 Anos atrás.

RE: Recorrer elementos de una estructura concreta desde portlet

New Member Postagens: 19 Data de Entrada: 31/01/14 Postagens Recentes
Hola a todos, estoy comenzando a desarrollar en Liferay y necesito hacer algo similar a lo que pregunta Israel, me he perdido un poco tratando de entender el código del ejemplo que explica Oriol quizás por mi inexperiencia y poca familiarización con las variables y métodos predefinidos de Liferay.
Necesito mostrar en un portlet el contenido generado a partir de una estructura determinada . Me explico mejor:

He creado una estructura que se llama "Evento" y los campos que posee son Título, Imagen, Descripción y Estado(booleano).
Ahora bien, lo que quiero es recorrer y mostrar en un portlet todos los contenidos de tipo "Evento" que el Estado sea true.
Espero haberme explicado bien...
Saludos y Gracias de antemano