mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
. Hooks to notify virtualisation server when the following cases occur to a web project:
- Import of website content - Edits/uploads to WEB-INF/web.xml, WEB-INF/lib/*, WEB-INF/classes/* - Addition of new user sandbox - Removal of a user sandbox . Fix to generation of website preview url in sandbox display when switching between root webapp folders . Fix to issue when swapping between web projects that did not contain the same webapp context git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@4611 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -142,6 +142,9 @@ public class AVMBrowseBean implements IContextListener
|
|||||||
/** Current AVM Node action context */
|
/** Current AVM Node action context */
|
||||||
private AVMNode avmNode = null;
|
private AVMNode avmNode = null;
|
||||||
|
|
||||||
|
/** The last displayed website node id */
|
||||||
|
private String lastWebsiteId = null;
|
||||||
|
|
||||||
/** breadcrumb location */
|
/** breadcrumb location */
|
||||||
private List<IBreadcrumbHandler> location = null;
|
private List<IBreadcrumbHandler> location = null;
|
||||||
|
|
||||||
@@ -306,8 +309,7 @@ public class AVMBrowseBean implements IContextListener
|
|||||||
|
|
||||||
FacesContext fc = FacesContext.getCurrentInstance();
|
FacesContext fc = FacesContext.getCurrentInstance();
|
||||||
ResourceBundle msg = Application.getBundle(fc);
|
ResourceBundle msg = Application.getBundle(fc);
|
||||||
Node websiteNode = this.navigator.getCurrentNode();
|
String storeRoot = (String)getWebsite().getProperties().get(WCMAppModel.PROP_AVMSTORE);
|
||||||
String storeRoot = (String)websiteNode.getProperties().get(WCMAppModel.PROP_AVMSTORE);
|
|
||||||
String stagingStore = getStagingStore();
|
String stagingStore = getStagingStore();
|
||||||
AVMStoreDescriptor store = this.avmService.getAVMStore(stagingStore);
|
AVMStoreDescriptor store = this.avmService.getAVMStore(stagingStore);
|
||||||
if (store != null)
|
if (store != null)
|
||||||
@@ -335,8 +337,7 @@ public class AVMBrowseBean implements IContextListener
|
|||||||
*/
|
*/
|
||||||
public String getStagingStore()
|
public String getStagingStore()
|
||||||
{
|
{
|
||||||
Node websiteNode = this.navigator.getCurrentNode();
|
String storeRoot = (String)getWebsite().getProperties().get(WCMAppModel.PROP_AVMSTORE);
|
||||||
String storeRoot = (String)websiteNode.getProperties().get(WCMAppModel.PROP_AVMSTORE);
|
|
||||||
return AVMConstants.buildAVMStagingStoreName(storeRoot);
|
return AVMConstants.buildAVMStagingStoreName(storeRoot);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -485,7 +486,7 @@ public class AVMBrowseBean implements IContextListener
|
|||||||
}
|
}
|
||||||
this.sandboxTitle = MessageFormat.format(Application.getMessage(
|
this.sandboxTitle = MessageFormat.format(Application.getMessage(
|
||||||
FacesContext.getCurrentInstance(), MSG_SANDBOXTITLE),
|
FacesContext.getCurrentInstance(), MSG_SANDBOXTITLE),
|
||||||
this.navigator.getCurrentNode().getName(),
|
getWebsite().getName(),
|
||||||
forUser);
|
forUser);
|
||||||
}
|
}
|
||||||
return this.sandboxTitle;
|
return this.sandboxTitle;
|
||||||
@@ -528,6 +529,13 @@ public class AVMBrowseBean implements IContextListener
|
|||||||
*/
|
*/
|
||||||
public Node getWebsite()
|
public Node getWebsite()
|
||||||
{
|
{
|
||||||
|
// check to see if the website we are browsing has changed since the last time
|
||||||
|
if (this.navigator.getCurrentNodeId().equals(this.lastWebsiteId) == false)
|
||||||
|
{
|
||||||
|
// clear context when we are browsing a new website
|
||||||
|
this.lastWebsiteId = this.navigator.getCurrentNodeId();
|
||||||
|
this.webapp = null;
|
||||||
|
}
|
||||||
return this.navigator.getCurrentNode();
|
return this.navigator.getCurrentNode();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -631,9 +639,8 @@ public class AVMBrowseBean implements IContextListener
|
|||||||
if (user.isAdmin() == false)
|
if (user.isAdmin() == false)
|
||||||
{
|
{
|
||||||
String currentUser = user.getUserName();
|
String currentUser = user.getUserName();
|
||||||
Node websiteNode = this.navigator.getCurrentNode();
|
|
||||||
List<ChildAssociationRef> userInfoRefs = this.nodeService.getChildAssocs(
|
List<ChildAssociationRef> userInfoRefs = this.nodeService.getChildAssocs(
|
||||||
websiteNode.getNodeRef(), WCMAppModel.ASSOC_WEBUSER, RegexQNamePattern.MATCH_ALL);
|
getWebsite().getNodeRef(), WCMAppModel.ASSOC_WEBUSER, RegexQNamePattern.MATCH_ALL);
|
||||||
for (ChildAssociationRef ref : userInfoRefs)
|
for (ChildAssociationRef ref : userInfoRefs)
|
||||||
{
|
{
|
||||||
NodeRef userInfoRef = ref.getChildRef();
|
NodeRef userInfoRef = ref.getChildRef();
|
||||||
|
@@ -267,7 +267,7 @@ public final class AVMConstants
|
|||||||
*
|
*
|
||||||
* @return true if the path should require a virtualisation server reload, false otherwise
|
* @return true if the path should require a virtualisation server reload, false otherwise
|
||||||
*/
|
*/
|
||||||
public static boolean requiresServerReload(String path)
|
public static boolean requiresVServerUpdate(String path)
|
||||||
{
|
{
|
||||||
if (path == null || path.length() == 0)
|
if (path == null || path.length() == 0)
|
||||||
{
|
{
|
||||||
@@ -277,14 +277,45 @@ public final class AVMConstants
|
|||||||
return webinfPathPattern.matcher(path).matches();
|
return webinfPathPattern.matcher(path).matches();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void reloadServerOnPath(String path, boolean force)
|
/**
|
||||||
|
* Update notification on the virtualisation server webapp as required for the specified path
|
||||||
|
*
|
||||||
|
* @param path Path to match against
|
||||||
|
* @param force True to force update of server even if path does not match
|
||||||
|
*/
|
||||||
|
public static void updateVServerWebapp(String path, boolean force)
|
||||||
{
|
{
|
||||||
if (force || requiresServerReload(path))
|
if (force || requiresVServerUpdate(path))
|
||||||
{
|
{
|
||||||
VirtServerRegistry vServerRegistry = (VirtServerRegistry)FacesContextUtils.getRequiredWebApplicationContext(
|
VirtServerRegistry vServerRegistry = (VirtServerRegistry)FacesContextUtils.getRequiredWebApplicationContext(
|
||||||
FacesContext.getCurrentInstance()).getBean(BEAN_VIRT_SERVER_REGISTRY);
|
FacesContext.getCurrentInstance()).getBean(BEAN_VIRT_SERVER_REGISTRY);
|
||||||
int webappindex = path.indexOf('/', path.indexOf(DIR_WEBAPPS) + DIR_WEBAPPS.length() + 1);
|
int webappIndex = path.indexOf('/', path.indexOf(DIR_WEBAPPS) + DIR_WEBAPPS.length() + 1);
|
||||||
vServerRegistry.webappUpdated(-1, path.substring(0, webappindex));
|
if (webappIndex != -1)
|
||||||
|
{
|
||||||
|
path = path.substring(0, webappIndex);
|
||||||
|
}
|
||||||
|
vServerRegistry.webappUpdated(-1, path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removal notification on the virtualisation server webapp as required for the specified path
|
||||||
|
*
|
||||||
|
* @param path Path to match against
|
||||||
|
* @param force True to force update of server even if path does not match
|
||||||
|
*/
|
||||||
|
public static void removeVServerWebapp(String path, boolean force)
|
||||||
|
{
|
||||||
|
if (force || requiresVServerUpdate(path))
|
||||||
|
{
|
||||||
|
VirtServerRegistry vServerRegistry = (VirtServerRegistry)FacesContextUtils.getRequiredWebApplicationContext(
|
||||||
|
FacesContext.getCurrentInstance()).getBean(BEAN_VIRT_SERVER_REGISTRY);
|
||||||
|
int webappIndex = path.indexOf('/', path.indexOf(DIR_WEBAPPS) + DIR_WEBAPPS.length() + 1);
|
||||||
|
if (webappIndex != -1)
|
||||||
|
{
|
||||||
|
path = path.substring(0, webappIndex);
|
||||||
|
}
|
||||||
|
vServerRegistry.webappRemoved(-1, path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -328,10 +359,7 @@ public final class AVMConstants
|
|||||||
|
|
||||||
// patterns for WEB-INF files that require virtualisation server reload
|
// patterns for WEB-INF files that require virtualisation server reload
|
||||||
private final static Pattern webinfPathPattern = Pattern.compile(
|
private final static Pattern webinfPathPattern = Pattern.compile(
|
||||||
".*:/" + AVMConstants.DIR_APPBASE + "/" + AVMConstants.DIR_WEBAPPS + "/.*/WEB-INF/(classes/.*)|(lib/.*)|(web.xml)",
|
".*:/" + AVMConstants.DIR_APPBASE + "/" + AVMConstants.DIR_WEBAPPS +
|
||||||
|
"/.*/WEB-INF/((classes/.*)|(lib/.*)|(web.xml))",
|
||||||
Pattern.CASE_INSENSITIVE);
|
Pattern.CASE_INSENSITIVE);
|
||||||
//private final static Pattern webinfLibPattern = Pattern.compile(
|
|
||||||
// ".*:/" + AVMConstants.DIR_APPBASE + "/" + AVMConstants.DIR_WEBAPPS + "/.*/WEB-INF/lib/.*");
|
|
||||||
//private final static Pattern webinfWebXmlPattern = Pattern.compile(
|
|
||||||
// ".*:/" + AVMConstants.DIR_APPBASE + "/" + AVMConstants.DIR_WEBAPPS + "/.*/WEB-INF/web.xml");
|
|
||||||
}
|
}
|
||||||
|
@@ -397,7 +397,6 @@ public class AVMEditBean
|
|||||||
|
|
||||||
// get an updating writer that we can use to modify the content on the current node
|
// get an updating writer that we can use to modify the content on the current node
|
||||||
ContentWriter writer = this.contentService.getWriter(avmRef, ContentModel.PROP_CONTENT, true);
|
ContentWriter writer = this.contentService.getWriter(avmRef, ContentModel.PROP_CONTENT, true);
|
||||||
|
|
||||||
if (nodeService.hasAspect(avmRef, WCMAppModel.ASPECT_FORM_INSTANCE_DATA))
|
if (nodeService.hasAspect(avmRef, WCMAppModel.ASPECT_FORM_INSTANCE_DATA))
|
||||||
{
|
{
|
||||||
this.editorOutput = formsService.writeXMLToString(this.instanceDataDocument);
|
this.editorOutput = formsService.writeXMLToString(this.instanceDataDocument);
|
||||||
@@ -410,7 +409,6 @@ public class AVMEditBean
|
|||||||
// regenerate form content
|
// regenerate form content
|
||||||
if (nodeService.hasAspect(avmRef, WCMAppModel.ASPECT_FORM_INSTANCE_DATA))
|
if (nodeService.hasAspect(avmRef, WCMAppModel.ASPECT_FORM_INSTANCE_DATA))
|
||||||
{
|
{
|
||||||
|
|
||||||
formsService.regenerateRenditions(avmRef);
|
formsService.regenerateRenditions(avmRef);
|
||||||
NodeRef[] uploadedFiles = this.formProcessorSession.getUploadedFiles();
|
NodeRef[] uploadedFiles = this.formProcessorSession.getUploadedFiles();
|
||||||
final List<AVMDifference> diffList = new ArrayList<AVMDifference>(uploadedFiles.length);
|
final List<AVMDifference> diffList = new ArrayList<AVMDifference>(uploadedFiles.length);
|
||||||
@@ -425,6 +423,8 @@ public class AVMEditBean
|
|||||||
this.avmSyncService.update(diffList, null, true, true, true, true, null, null);
|
this.avmSyncService.update(diffList, null, true, true, true, true, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AVMConstants.updateVServerWebapp(avmNode.getPath(), false);
|
||||||
|
|
||||||
resetState();
|
resetState();
|
||||||
|
|
||||||
return AlfrescoNavigationHandler.CLOSE_DIALOG_OUTCOME;
|
return AlfrescoNavigationHandler.CLOSE_DIALOG_OUTCOME;
|
||||||
|
@@ -100,6 +100,11 @@ public class AddAvmContentDialog extends AddContentDialog
|
|||||||
writer.putContent(strContent == null ? "" : strContent);
|
writer.putContent(strContent == null ? "" : strContent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// reload the virtualisation server as required
|
||||||
|
if (logger.isDebugEnabled())
|
||||||
|
logger.debug("Reloading virtualisation server on path: " + path);
|
||||||
|
AVMConstants.updateVServerWebapp(path, false);
|
||||||
|
|
||||||
// remember the created node now
|
// remember the created node now
|
||||||
this.createdNode = fileNodeRef;
|
this.createdNode = fileNodeRef;
|
||||||
}
|
}
|
||||||
|
@@ -88,6 +88,10 @@ public class DeleteSandboxDialog extends BaseDialogBean
|
|||||||
// remove the association to this web project user meta-data
|
// remove the association to this web project user meta-data
|
||||||
this.nodeService.removeChild(website.getNodeRef(), ref.getChildRef());
|
this.nodeService.removeChild(website.getNodeRef(), ref.getChildRef());
|
||||||
|
|
||||||
|
// update virtualisation server for the sandbox removal
|
||||||
|
String path = AVMConstants.buildAVMStoreWebappPath(sandbox, this.avmBrowseBean.getWebapp());
|
||||||
|
AVMConstants.removeVServerWebapp(path, true);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -227,6 +227,9 @@ public class ImportWebsiteDialog
|
|||||||
|
|
||||||
// After an import it's a good idea to snapshot the staging store
|
// After an import it's a good idea to snapshot the staging store
|
||||||
this.avmService.createSnapshot(store, "Import of file: " + this.fileName, null);
|
this.avmService.createSnapshot(store, "Import of file: " + this.fileName, null);
|
||||||
|
|
||||||
|
// Reload virtualisation server as required
|
||||||
|
AVMConstants.updateVServerWebapp(rootPath, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@@ -11,6 +11,7 @@ import java.util.Set;
|
|||||||
import javax.faces.context.FacesContext;
|
import javax.faces.context.FacesContext;
|
||||||
|
|
||||||
import org.alfresco.model.WCMAppModel;
|
import org.alfresco.model.WCMAppModel;
|
||||||
|
import org.alfresco.service.cmr.avm.AVMService;
|
||||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
@@ -41,6 +42,17 @@ public class InviteWebsiteUsersWizard extends InviteUsersWizard
|
|||||||
/** assume we are launching the wizard standalone */
|
/** assume we are launching the wizard standalone */
|
||||||
private boolean standalone = true;
|
private boolean standalone = true;
|
||||||
|
|
||||||
|
/** AVM Browse Bean reference */
|
||||||
|
protected AVMBrowseBean avmBrowseBean;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param avmBrowseBean The AVMBrowseBean to set.
|
||||||
|
*/
|
||||||
|
public void setAvmBrowseBean(AVMBrowseBean avmBrowseBean)
|
||||||
|
{
|
||||||
|
this.avmBrowseBean = avmBrowseBean;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see org.alfresco.web.bean.wizard.InviteUsersWizard#init(java.util.Map)
|
* @see org.alfresco.web.bean.wizard.InviteUsersWizard#init(java.util.Map)
|
||||||
@@ -129,6 +141,7 @@ public class InviteWebsiteUsersWizard extends InviteUsersWizard
|
|||||||
{
|
{
|
||||||
SandboxFactory.createUserSandbox(
|
SandboxFactory.createUserSandbox(
|
||||||
getAvmStore(), this.managers, userRole.getAuthority(), userRole.getRole());
|
getAvmStore(), this.managers, userRole.getAuthority(), userRole.getRole());
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -149,6 +162,15 @@ public class InviteWebsiteUsersWizard extends InviteUsersWizard
|
|||||||
props);
|
props);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// reload virtualisation server for the web project
|
||||||
|
if (isStandalone())
|
||||||
|
{
|
||||||
|
String stagingStore = AVMConstants.buildAVMStagingStoreName(getAvmStore());
|
||||||
|
String path = AVMConstants.buildAVMStoreWebappPath(stagingStore, this.avmBrowseBean.getWebapp());
|
||||||
|
AVMConstants.updateVServerWebapp(path, true);
|
||||||
|
}
|
||||||
|
|
||||||
return outcome;
|
return outcome;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -277,7 +277,7 @@ public final class SandboxFactory
|
|||||||
*/
|
*/
|
||||||
private static void tagStoreDNSPath(AVMService avmService, String store, String... components)
|
private static void tagStoreDNSPath(AVMService avmService, String store, String... components)
|
||||||
{
|
{
|
||||||
String path = store + ":/" + AVMConstants.DIR_APPBASE + '/' + AVMConstants.DIR_WEBAPPS;
|
String path = AVMConstants.buildAVMStoreRootPath(store);
|
||||||
// DNS name mangle the property name - can only contain value DNS characters!
|
// DNS name mangle the property name - can only contain value DNS characters!
|
||||||
String dnsProp = AVMConstants.PROP_DNS + DNSNameMangler.MakeDNSName(components);
|
String dnsProp = AVMConstants.PROP_DNS + DNSNameMangler.MakeDNSName(components);
|
||||||
avmService.setStoreProperty(store, QName.createQName(null, dnsProp),
|
avmService.setStoreProperty(store, QName.createQName(null, dnsProp),
|
||||||
|
@@ -111,6 +111,7 @@ public class UIUserSandboxes extends SelfRenderingComponent
|
|||||||
private static final String ROLE_CONTENT_MANAGER = "ContentManager";
|
private static final String ROLE_CONTENT_MANAGER = "ContentManager";
|
||||||
|
|
||||||
private static final String REQUEST_FORM_REF = "formref";
|
private static final String REQUEST_FORM_REF = "formref";
|
||||||
|
private static final String REQUEST_PREVIEW_REF = "prevhref";
|
||||||
|
|
||||||
private static final String SPACE_ICON = "/images/icons/" + BrowseBean.SPACE_SMALL_DEFAULT + ".gif";
|
private static final String SPACE_ICON = "/images/icons/" + BrowseBean.SPACE_SMALL_DEFAULT + ".gif";
|
||||||
|
|
||||||
@@ -334,9 +335,12 @@ public class UIUserSandboxes extends SelfRenderingComponent
|
|||||||
|
|
||||||
// direct actions for a sandbox
|
// direct actions for a sandbox
|
||||||
String websiteUrl = AVMConstants.buildAVMWebappUrl(mainStore, getWebapp());
|
String websiteUrl = AVMConstants.buildAVMWebappUrl(mainStore, getWebapp());
|
||||||
|
Map requestMap = context.getExternalContext().getRequestMap();
|
||||||
|
requestMap.put(REQUEST_PREVIEW_REF, websiteUrl);
|
||||||
Utils.encodeRecursive(context, aquireAction(
|
Utils.encodeRecursive(context, aquireAction(
|
||||||
context, mainStore, username, ACT_SANDBOX_PREVIEW, "/images/icons/preview_website.gif",
|
context, mainStore, username, ACT_SANDBOX_PREVIEW, "/images/icons/preview_website.gif",
|
||||||
null, null, websiteUrl, null));
|
null, null, "#{" + REQUEST_PREVIEW_REF + "}", null));
|
||||||
|
requestMap.remove(REQUEST_PREVIEW_REF);
|
||||||
out.write(" ");
|
out.write(" ");
|
||||||
|
|
||||||
Utils.encodeRecursive(context, aquireAction(
|
Utils.encodeRecursive(context, aquireAction(
|
||||||
@@ -967,8 +971,16 @@ public class UIUserSandboxes extends SelfRenderingComponent
|
|||||||
control.setAction(new ConstantMethodBinding(outcome));
|
control.setAction(new ConstantMethodBinding(outcome));
|
||||||
}
|
}
|
||||||
if (url != null)
|
if (url != null)
|
||||||
|
{
|
||||||
|
if (url.startsWith("#{") == true)
|
||||||
|
{
|
||||||
|
ValueBinding vb = facesApp.createValueBinding(url);
|
||||||
|
control.setValueBinding("href", vb);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
control.setHref(url);
|
control.setHref(url);
|
||||||
|
}
|
||||||
control.setTarget("new");
|
control.setTarget("new");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -2284,6 +2284,10 @@
|
|||||||
<property-name>authorityService</property-name>
|
<property-name>authorityService</property-name>
|
||||||
<value>#{AuthorityService}</value>
|
<value>#{AuthorityService}</value>
|
||||||
</managed-property>
|
</managed-property>
|
||||||
|
<managed-property>
|
||||||
|
<property-name>avmBrowseBean</property-name>
|
||||||
|
<value>#{AVMBrowseBean}</value>
|
||||||
|
</managed-property>
|
||||||
</managed-bean>
|
</managed-bean>
|
||||||
|
|
||||||
<managed-bean>
|
<managed-bean>
|
||||||
|
@@ -78,7 +78,7 @@
|
|||||||
<nobr>
|
<nobr>
|
||||||
<%-- More actions menu --%>
|
<%-- More actions menu --%>
|
||||||
<a:menu id="actions-menu" itemSpacing="4" label="#{msg.actions}" image="/images/icons/menu.gif" menuStyleClass="moreActionsMenu" style="white-space:nowrap">
|
<a:menu id="actions-menu" itemSpacing="4" label="#{msg.actions}" image="/images/icons/menu.gif" menuStyleClass="moreActionsMenu" style="white-space:nowrap">
|
||||||
<r:actions id="acts-website" value="browse_website_menu" context="#{NavigationBean.currentNode}" />
|
<r:actions id="acts-website" value="browse_website_menu" context="#{AVMBrowseBean.website}" />
|
||||||
</a:menu>
|
</a:menu>
|
||||||
</nobr>
|
</nobr>
|
||||||
</td>
|
</td>
|
||||||
@@ -183,7 +183,7 @@
|
|||||||
<a:panel id="sandboxes-panel" border="white" bgcolor="white" titleBorder="blue" titleBgcolor="#D3E6FE" styleClass="mainSubTitle" label="#{msg.user_sandboxes}">
|
<a:panel id="sandboxes-panel" border="white" bgcolor="white" titleBorder="blue" titleBgcolor="#D3E6FE" styleClass="mainSubTitle" label="#{msg.user_sandboxes}">
|
||||||
|
|
||||||
<%-- User Sandboxes List --%>
|
<%-- User Sandboxes List --%>
|
||||||
<w:userSandboxes id="sandboxes" binding="#{AVMBrowseBean.userSandboxes}" value="#{NavigationBean.currentNode.nodeRef}" webapp="#{AVMBrowseBean.webapp}" />
|
<w:userSandboxes id="sandboxes" binding="#{AVMBrowseBean.userSandboxes}" value="#{AVMBrowseBean.website.nodeRef}" webapp="#{AVMBrowseBean.webapp}" />
|
||||||
|
|
||||||
</a:panel>
|
</a:panel>
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user