2012-04-02 3 views
2

Ich arbeite derzeit mit Liferay Portal Enterprise Edition 6.1 EE GA1 (Paton/Build 6110/15. Februar 2012), die auf meinem lokalen Rechner (Win 7/x64) zu Entwicklungs- und Testzwecken eingesetzt wird. Es läuft im Standard 7.0.25 Tomcat und wir verwenden Spring MVC, um unsere Portlets zu entwickeln.Wie programmiere ich das Layout "Link zu Seite" in Liferay 6.1?

Ich füge ein neues Layout (Seite) zu Liferay programmatisch und ich setze den Typ des Typs als "link_to_layout" (LayoutConstants.TYPE_LINK_TO_LAYOUT). Das Layout wurde erfolgreich erstellt, aber bis jetzt habe ich noch nicht herausgefunden, wie ich einen Wert für die Verbindung einstellen kann, z. etwas wie "/ login". Unten ist der Code ich das Layout hinzufügen bin mit:

// Spring specific code for getting the Request 
HttpServletRequest request = null;  
ServletRequestAttributes sa = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); 
if(null != sa){ 
    request = sa.getRequest(); 
}  
if (request == null) { break; } 

// all values are usually retrieved via special methods from our code 
// for better readability I have added the real values here 
long userId = 10102; 
int groupId = 13056; 
boolean privateLayout = false; 
long plid = LayoutConstants.DEFAULT_PARENT_LAYOUT_ID; 
String title = "my title"; 
ServiceContext serviceContext = ServiceContextFactory.getInstance(request); 
String layoutType = LayoutConstants.TYPE_LINK_TO_LAYOUT; 
boolean hidden = false; 
String friendlyURL = "/new-page"; 
// finally, add the layout 
Layout layout = LayoutLocalServiceUtil.addLayout(userId, groupId, privateLayout, plid, title, title, StringPool.BLANK, layoutType, hidden, friendlyURL, serviceContext); 

kann ich jetzt manuell überprüfen, ob die Seite erstellt wurde und der Seitentyp durch Überprüfen der Site Pages in der Systemsteuerung auf „link_to_layout“ gesetzt wurde . Dort sehe ich die neue Seite mit einem leeren Wert "Link to Page". Ich kann dies auch programmatisch überprüfen, indem Sie den folgenden Code aufrufen (das ist die Nachricht in der Konsole zeigt):

if(layout.isTypeLinkToLayout()){ 
log.debug("type is link to page"); 
} 

Wenn jemand weiß, wie man den Wert der Link zu Seite zu setzen, geben Sie bitte Ihre Wissen mit mir teilen. Vielen Dank für Ihre Hilfe und Ihre Antworten :-)

Mit freundlichen Grüßen, Mathias

Antwort

5

Nach mehr Zeit mit dem Thema und Debuggen durch Liferay zu verbringen, habe ich endlich über eine Lösung kam: Der Wert des „-Link zu Seite "kann über eine Eigenschaft in den TypeSettingsProperties eines Layouts festgelegt werden. Der Schlüssel "linkToLayoutId" mit der notwendigen Layout-ID kümmert sich darum.

Der folgende Code für mich gearbeitet, und ich hoffe, dass es für andere Entwickler von Vorteil sein wird:

// Spring specific code for getting the Request 
HttpServletRequest request = null;  
ServletRequestAttributes sa = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); 
if(null != sa){ 
    request = sa.getRequest(); 
}  
if (request == null) { break; } 

// all values are usually retrieved via special methods from our code 
// for better readability I have added the real values here 
long userId = 10102; 
int groupId = 13056; 
boolean privateLayout = false; 
long plid = LayoutConstants.DEFAULT_PARENT_LAYOUT_ID; 
String title = "my title"; 
ServiceContext serviceContext = ServiceContextFactory.getInstance(request); 
String layoutType = LayoutConstants.TYPE_LINK_TO_LAYOUT; 
boolean hidden = false; 
String friendlyURL = "/new-page"; 
// add the layout 
Layout layout = LayoutLocalServiceUtil.addLayout(userId, groupId, privateLayout, plid, title, title, StringPool.BLANK, layoutType, hidden, friendlyURL, serviceContext); 
String LinkToPageUrl = "/login"; 
Layout linkToPageLayout = LayoutLocalServiceUtil.getFriendlyURLLayout(groupId, false, linkToPageUrl); 
long linkToPageId = linkToPageLayout.getLayoutId(); 
// set the value of the "link to page" 
UnicodeProperties props = layout.getTypeSettingsProperties(); 
props.put("linkToLayoutId", Long.toString(linkToPageId)); 
layout.setTypeSettingsProperties(props); 
LayoutLocalServiceUtil.updateLayout(layout); // crucial, 'cause otherwise the changes will not appear on the layout 
Verwandte Themen