mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
. Added support for folder-type restrictions in Advanced Search config
- Added forums folder type to list by default - Added folder-type drop-down to Advanced Search UI git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@2878 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -300,6 +300,7 @@ saved_search_warning=This operation will attempt to overwrite the existing saved
|
|||||||
user_searches=Your Searches
|
user_searches=Your Searches
|
||||||
global_searches=Public Searches
|
global_searches=Public Searches
|
||||||
save_search_global=Save as a public search available to all users.
|
save_search_global=Save as a public search available to all users.
|
||||||
|
folder_type=Folder Type
|
||||||
|
|
||||||
# Forum messages
|
# Forum messages
|
||||||
forums=Forum Space
|
forums=Forum Space
|
||||||
|
@@ -151,9 +151,14 @@
|
|||||||
<!-- type constraint drop-down -->
|
<!-- type constraint drop-down -->
|
||||||
<content-types>
|
<content-types>
|
||||||
<!-- cm:content type is implicit in this list -->
|
<!-- cm:content type is implicit in this list -->
|
||||||
<!-- types must extend cm:content for the Alfresco web-client -->
|
<!-- types must extend cm:content for display in the Alfresco web-client -->
|
||||||
<type name="fm:post" />
|
<type name="fm:post" />
|
||||||
</content-types>
|
</content-types>
|
||||||
|
<folder-types>
|
||||||
|
<!-- cm:folder type is implicit in this list -->
|
||||||
|
<!-- types must extend cm:folder for display in the Alfresco web-client -->
|
||||||
|
<type name="fm:forums" />
|
||||||
|
</folder-types>
|
||||||
<!-- custom properties to be shown in the More Options panel -->
|
<!-- custom properties to be shown in the More Options panel -->
|
||||||
<custom-properties>
|
<custom-properties>
|
||||||
</custom-properties>
|
</custom-properties>
|
||||||
|
@@ -522,6 +522,22 @@ public class AdvancedSearchBean
|
|||||||
this.contentType = contentType;
|
this.contentType = contentType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Returns the folder type currenty selected
|
||||||
|
*/
|
||||||
|
public String getFolderType()
|
||||||
|
{
|
||||||
|
return this.folderType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param folderType Sets the currently selected folder type
|
||||||
|
*/
|
||||||
|
public void setFolderType(String folderType)
|
||||||
|
{
|
||||||
|
this.folderType = folderType;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Returns the contentFormat.
|
* @return Returns the contentFormat.
|
||||||
*/
|
*/
|
||||||
@@ -571,16 +587,17 @@ public class AdvancedSearchBean
|
|||||||
{
|
{
|
||||||
FacesContext context = FacesContext.getCurrentInstance();
|
FacesContext context = FacesContext.getCurrentInstance();
|
||||||
|
|
||||||
|
DictionaryService dictionaryService = Repository.getServiceRegistry(context).getDictionaryService();
|
||||||
|
|
||||||
// add the well known cm:content object type by default
|
// add the well known cm:content object type by default
|
||||||
this.contentTypes = new ArrayList<SelectItem>(5);
|
this.contentTypes = new ArrayList<SelectItem>(5);
|
||||||
this.contentTypes.add(new SelectItem(ContentModel.TYPE_CONTENT.toString(),
|
this.contentTypes.add(new SelectItem(ContentModel.TYPE_CONTENT.toString(),
|
||||||
Application.getMessage(context, MSG_CONTENT)));
|
dictionaryService.getType(ContentModel.TYPE_CONTENT).getTitle()));
|
||||||
|
|
||||||
// add any configured content sub-types to the list
|
// add any configured content sub-types to the list
|
||||||
List<String> types = getSearchConfig().getContentTypes();
|
List<String> types = getSearchConfig().getContentTypes();
|
||||||
if (types != null)
|
if (types != null)
|
||||||
{
|
{
|
||||||
DictionaryService dictionaryService = Repository.getServiceRegistry(context).getDictionaryService();
|
|
||||||
for (String type : types)
|
for (String type : types)
|
||||||
{
|
{
|
||||||
QName idQName = Repository.resolveToQName(type);
|
QName idQName = Repository.resolveToQName(type);
|
||||||
@@ -613,6 +630,58 @@ public class AdvancedSearchBean
|
|||||||
return this.contentTypes;
|
return this.contentTypes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Returns a list of folder object types to allow the user to select from
|
||||||
|
*/
|
||||||
|
public List<SelectItem> getFolderTypes()
|
||||||
|
{
|
||||||
|
if (this.folderTypes == null)
|
||||||
|
{
|
||||||
|
FacesContext context = FacesContext.getCurrentInstance();
|
||||||
|
|
||||||
|
DictionaryService dictionaryService = Repository.getServiceRegistry(context).getDictionaryService();
|
||||||
|
|
||||||
|
// add the well known cm:folder object type by default
|
||||||
|
this.folderTypes = new ArrayList<SelectItem>(5);
|
||||||
|
this.folderTypes.add(new SelectItem(ContentModel.TYPE_FOLDER.toString(),
|
||||||
|
dictionaryService.getType(ContentModel.TYPE_FOLDER).getTitle()));
|
||||||
|
|
||||||
|
// add any configured folder sub-types to the list
|
||||||
|
List<String> types = getSearchConfig().getFolderTypes();
|
||||||
|
if (types != null)
|
||||||
|
{
|
||||||
|
for (String type : types)
|
||||||
|
{
|
||||||
|
QName idQName = Repository.resolveToQName(type);
|
||||||
|
if (idQName != null)
|
||||||
|
{
|
||||||
|
TypeDefinition typeDef = dictionaryService.getType(idQName);
|
||||||
|
|
||||||
|
if (typeDef != null && dictionaryService.isSubClass(typeDef.getName(), ContentModel.TYPE_FOLDER))
|
||||||
|
{
|
||||||
|
// try and get label from the dictionary
|
||||||
|
String label = typeDef.getTitle();
|
||||||
|
|
||||||
|
// else just use the localname
|
||||||
|
if (label == null)
|
||||||
|
{
|
||||||
|
label = idQName.getLocalName();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.folderTypes.add(new SelectItem(idQName.toString(), label));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// make sure the list is sorted by the label
|
||||||
|
QuickSort sorter = new QuickSort(this.folderTypes, "label", true, IDataContainer.SORT_CASEINSENSITIVE);
|
||||||
|
sorter.sort();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.folderTypes;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Returns a list of content formats to allow the user to select from
|
* @return Returns a list of content formats to allow the user to select from
|
||||||
*/
|
*/
|
||||||
@@ -662,6 +731,7 @@ public class AdvancedSearchBean
|
|||||||
this.lookin = LOOKIN_ALL;
|
this.lookin = LOOKIN_ALL;
|
||||||
this.contentType = null;
|
this.contentType = null;
|
||||||
this.contentFormat = null;
|
this.contentFormat = null;
|
||||||
|
this.folderType = null;
|
||||||
this.location = null;
|
this.location = null;
|
||||||
this.locationChildren = true;
|
this.locationChildren = true;
|
||||||
this.categories = new ArrayList<Node>(2);
|
this.categories = new ArrayList<Node>(2);
|
||||||
@@ -822,6 +892,12 @@ public class AdvancedSearchBean
|
|||||||
search.setContentType(this.contentType);
|
search.setContentType(this.contentType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// folder type restriction
|
||||||
|
if (this.folderType != null)
|
||||||
|
{
|
||||||
|
search.setFolderType(this.folderType);
|
||||||
|
}
|
||||||
|
|
||||||
// set the Search Context onto the top-level navigator bean
|
// set the Search Context onto the top-level navigator bean
|
||||||
// this causes the browse screen to switch into search results view
|
// this causes the browse screen to switch into search results view
|
||||||
this.navigator.setSearchContext(search);
|
this.navigator.setSearchContext(search);
|
||||||
@@ -1168,6 +1244,7 @@ public class AdvancedSearchBean
|
|||||||
|
|
||||||
this.contentType = search.getContentType();
|
this.contentType = search.getContentType();
|
||||||
this.contentFormat = search.getMimeType();
|
this.contentFormat = search.getMimeType();
|
||||||
|
this.folderType = search.getFolderType();
|
||||||
|
|
||||||
this.description = search.getAttributeQuery(ContentModel.PROP_DESCRIPTION);
|
this.description = search.getAttributeQuery(ContentModel.PROP_DESCRIPTION);
|
||||||
this.title = search.getAttributeQuery(ContentModel.PROP_TITLE);
|
this.title = search.getAttributeQuery(ContentModel.PROP_TITLE);
|
||||||
@@ -1476,7 +1553,6 @@ public class AdvancedSearchBean
|
|||||||
// ------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------
|
||||||
// Private data
|
// Private data
|
||||||
|
|
||||||
private static final String MSG_CONTENT = "content";
|
|
||||||
private static final String MSG_ALL_FORMATS = "all_formats";
|
private static final String MSG_ALL_FORMATS = "all_formats";
|
||||||
private static final String MSG_ERROR_SAVE_SEARCH = "error_save_search";
|
private static final String MSG_ERROR_SAVE_SEARCH = "error_save_search";
|
||||||
private static final String MSG_ERROR_RESTORE_SEARCH = "error_restore_search";
|
private static final String MSG_ERROR_RESTORE_SEARCH = "error_restore_search";
|
||||||
@@ -1536,17 +1612,23 @@ public class AdvancedSearchBean
|
|||||||
/** lookup of custom property QName string to DataTypeDefinition for the property */
|
/** lookup of custom property QName string to DataTypeDefinition for the property */
|
||||||
private Map<String, DataTypeDefinition> customPropertyLookup = null;
|
private Map<String, DataTypeDefinition> customPropertyLookup = null;
|
||||||
|
|
||||||
/** content types to for restricting searches */
|
|
||||||
private List<SelectItem> contentTypes;
|
|
||||||
|
|
||||||
/** content format list restricting searches */
|
/** content format list restricting searches */
|
||||||
private List<SelectItem> contentFormats;
|
private List<SelectItem> contentFormats;
|
||||||
|
|
||||||
|
/** content format selection */
|
||||||
|
private String contentFormat;
|
||||||
|
|
||||||
/** content type selection */
|
/** content type selection */
|
||||||
private String contentType;
|
private String contentType;
|
||||||
|
|
||||||
/** content format selection */
|
/** content types for restricting searches */
|
||||||
private String contentFormat;
|
private List<SelectItem> contentTypes;
|
||||||
|
|
||||||
|
/** folder type selection */
|
||||||
|
private String folderType;
|
||||||
|
|
||||||
|
/** folder types for restricting searches */
|
||||||
|
private List<SelectItem> folderTypes;
|
||||||
|
|
||||||
/** the text to search for */
|
/** the text to search for */
|
||||||
private String text = "";
|
private String text = "";
|
||||||
|
@@ -73,6 +73,7 @@ public final class SearchContext implements Serializable
|
|||||||
private static final String ELEMENT_ATTRIBUTES = "attributes";
|
private static final String ELEMENT_ATTRIBUTES = "attributes";
|
||||||
private static final String ELEMENT_MIMETYPE = "mimetype";
|
private static final String ELEMENT_MIMETYPE = "mimetype";
|
||||||
private static final String ELEMENT_CONTENT_TYPE = "content-type";
|
private static final String ELEMENT_CONTENT_TYPE = "content-type";
|
||||||
|
private static final String ELEMENT_FOLDER_TYPE = "folder-type";
|
||||||
private static final String ELEMENT_CATEGORY = "category";
|
private static final String ELEMENT_CATEGORY = "category";
|
||||||
private static final String ELEMENT_CATEGORIES = "categories";
|
private static final String ELEMENT_CATEGORIES = "categories";
|
||||||
private static final String ELEMENT_LOCATION = "location";
|
private static final String ELEMENT_LOCATION = "location";
|
||||||
@@ -104,6 +105,9 @@ public final class SearchContext implements Serializable
|
|||||||
/** categories to add to the search */
|
/** categories to add to the search */
|
||||||
private String[] categories = new String[0];
|
private String[] categories = new String[0];
|
||||||
|
|
||||||
|
/** folder type to restrict search against */
|
||||||
|
private String folderType = null;
|
||||||
|
|
||||||
/** content type to restrict search against */
|
/** content type to restrict search against */
|
||||||
private String contentType = null;
|
private String contentType = null;
|
||||||
|
|
||||||
@@ -384,8 +388,16 @@ public final class SearchContext implements Serializable
|
|||||||
fileTypeQuery = " TYPE:\"{" + NamespaceService.CONTENT_MODEL_1_0_URI + "}content\" ";
|
fileTypeQuery = " TYPE:\"{" + NamespaceService.CONTENT_MODEL_1_0_URI + "}content\" ";
|
||||||
}
|
}
|
||||||
|
|
||||||
// match against FOLDER type
|
// match against appropriate folder type
|
||||||
String folderTypeQuery = " TYPE:\"{" + NamespaceService.CONTENT_MODEL_1_0_URI + "}folder\" ";
|
String folderTypeQuery;
|
||||||
|
if (folderType != null)
|
||||||
|
{
|
||||||
|
folderTypeQuery = " TYPE:\"" + folderType + "\" ";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
folderTypeQuery = " TYPE:\"{" + NamespaceService.CONTENT_MODEL_1_0_URI + "}folder\" ";
|
||||||
|
}
|
||||||
|
|
||||||
String fullTextQuery = fullTextBuf.toString();
|
String fullTextQuery = fullTextBuf.toString();
|
||||||
String nameAttrQuery = nameAttrBuf.toString();
|
String nameAttrQuery = nameAttrBuf.toString();
|
||||||
@@ -595,6 +607,22 @@ public final class SearchContext implements Serializable
|
|||||||
this.contentType = contentType;
|
this.contentType = contentType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Returns the folderType.
|
||||||
|
*/
|
||||||
|
public String getFolderType()
|
||||||
|
{
|
||||||
|
return this.folderType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param folderType The folder type to restrict attribute search against.
|
||||||
|
*/
|
||||||
|
public void setFolderType(String folderType)
|
||||||
|
{
|
||||||
|
this.folderType = folderType;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Returns the mimeType.
|
* @return Returns the mimeType.
|
||||||
*/
|
*/
|
||||||
@@ -690,6 +718,7 @@ public final class SearchContext implements Serializable
|
|||||||
* <category>XPath</category>
|
* <category>XPath</category>
|
||||||
* </categories>
|
* </categories>
|
||||||
* <content-type>String</content-type>
|
* <content-type>String</content-type>
|
||||||
|
* <folder-type>String</folder-type>
|
||||||
* <mimetype>String</mimetype>
|
* <mimetype>String</mimetype>
|
||||||
* <attributes>
|
* <attributes>
|
||||||
* <attribute name="String">String</attribute>
|
* <attribute name="String">String</attribute>
|
||||||
@@ -735,6 +764,10 @@ public final class SearchContext implements Serializable
|
|||||||
{
|
{
|
||||||
root.addElement(ELEMENT_CONTENT_TYPE).addText(this.contentType);
|
root.addElement(ELEMENT_CONTENT_TYPE).addText(this.contentType);
|
||||||
}
|
}
|
||||||
|
if (this.folderType != null)
|
||||||
|
{
|
||||||
|
root.addElement(ELEMENT_FOLDER_TYPE).addText(this.folderType);
|
||||||
|
}
|
||||||
if (this.mimeType != null && this.mimeType.length() != 0)
|
if (this.mimeType != null && this.mimeType.length() != 0)
|
||||||
{
|
{
|
||||||
root.addElement(ELEMENT_MIMETYPE).addText(this.mimeType);
|
root.addElement(ELEMENT_MIMETYPE).addText(this.mimeType);
|
||||||
@@ -834,6 +867,11 @@ public final class SearchContext implements Serializable
|
|||||||
{
|
{
|
||||||
this.contentType = contentTypeElement.getText();
|
this.contentType = contentTypeElement.getText();
|
||||||
}
|
}
|
||||||
|
Element folderTypeElement = rootElement.element(ELEMENT_FOLDER_TYPE);
|
||||||
|
if (folderTypeElement != null)
|
||||||
|
{
|
||||||
|
this.folderType = folderTypeElement.getText();
|
||||||
|
}
|
||||||
Element mimetypeElement = rootElement.element(ELEMENT_MIMETYPE);
|
Element mimetypeElement = rootElement.element(ELEMENT_MIMETYPE);
|
||||||
if (mimetypeElement != null)
|
if (mimetypeElement != null)
|
||||||
{
|
{
|
||||||
|
@@ -33,6 +33,7 @@ public class AdvancedSearchConfigElement extends ConfigElementAdapter
|
|||||||
public static final String CONFIG_ELEMENT_ID = "advanced-search";
|
public static final String CONFIG_ELEMENT_ID = "advanced-search";
|
||||||
|
|
||||||
private List<String> contentTypes = null;
|
private List<String> contentTypes = null;
|
||||||
|
private List<String> folderTypes = null;
|
||||||
private List<CustomProperty> customProps = null;
|
private List<CustomProperty> customProps = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -78,6 +79,13 @@ public class AdvancedSearchConfigElement extends ConfigElementAdapter
|
|||||||
combinedElement.addContentType(type);
|
combinedElement.addContentType(type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (this.folderTypes != null)
|
||||||
|
{
|
||||||
|
for (String type : this.folderTypes)
|
||||||
|
{
|
||||||
|
combinedElement.addFolderType(type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (this.customProps != null)
|
if (this.customProps != null)
|
||||||
{
|
{
|
||||||
@@ -139,6 +147,38 @@ public class AdvancedSearchConfigElement extends ConfigElementAdapter
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Returns the folderTypes.
|
||||||
|
*/
|
||||||
|
public List<String> getFolderTypes()
|
||||||
|
{
|
||||||
|
return this.folderTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param folderTypes The folderTypes to set.
|
||||||
|
*/
|
||||||
|
/*package*/ void setFolderTypes(List<String> folderTypes)
|
||||||
|
{
|
||||||
|
this.folderTypes = folderTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param folderType Adds the given folder type to the list
|
||||||
|
*/
|
||||||
|
/*package*/ void addFolderType(String folderType)
|
||||||
|
{
|
||||||
|
if (this.folderTypes == null)
|
||||||
|
{
|
||||||
|
this.folderTypes = new ArrayList<String>(3);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.folderTypes.contains(folderType) == false)
|
||||||
|
{
|
||||||
|
this.folderTypes.add(folderType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Returns the customProps.
|
* @return Returns the customProps.
|
||||||
*/
|
*/
|
||||||
|
@@ -34,6 +34,7 @@ import org.dom4j.Element;
|
|||||||
public class AdvancedSearchElementReader implements ConfigElementReader
|
public class AdvancedSearchElementReader implements ConfigElementReader
|
||||||
{
|
{
|
||||||
public static final String ELEMENT_CONTENTTYPES = "content-types";
|
public static final String ELEMENT_CONTENTTYPES = "content-types";
|
||||||
|
public static final String ELEMENT_FOLDERTYPES = "folder-types";
|
||||||
public static final String ELEMENT_TYPE = "type";
|
public static final String ELEMENT_TYPE = "type";
|
||||||
public static final String ELEMENT_CUSTOMPROPS = "custom-properties";
|
public static final String ELEMENT_CUSTOMPROPS = "custom-properties";
|
||||||
public static final String ELEMENT_METADATA = "meta-data";
|
public static final String ELEMENT_METADATA = "meta-data";
|
||||||
@@ -81,6 +82,24 @@ public class AdvancedSearchElementReader implements ConfigElementReader
|
|||||||
configElement.setContentTypes(types);
|
configElement.setContentTypes(types);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get the list of folder types
|
||||||
|
Element folderTypes = element.element(ELEMENT_FOLDERTYPES);
|
||||||
|
if (folderTypes != null)
|
||||||
|
{
|
||||||
|
Iterator<Element> typesItr = folderTypes.elementIterator(ELEMENT_TYPE);
|
||||||
|
List<String> types = new ArrayList<String>(5);
|
||||||
|
while (typesItr.hasNext())
|
||||||
|
{
|
||||||
|
Element folderType = typesItr.next();
|
||||||
|
String type = folderType.attributeValue(ATTRIBUTE_NAME);
|
||||||
|
if (type != null)
|
||||||
|
{
|
||||||
|
types.add(type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
configElement.setFolderTypes(types);
|
||||||
|
}
|
||||||
|
|
||||||
// get the list of custom properties to display
|
// get the list of custom properties to display
|
||||||
Element customProps = element.element(ELEMENT_CUSTOMPROPS);
|
Element customProps = element.element(ELEMENT_CUSTOMPROPS);
|
||||||
if (customProps != null)
|
if (customProps != null)
|
||||||
|
@@ -261,6 +261,14 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<table cellpadding="2" cellspacing="2" border="0">
|
<table cellpadding="2" cellspacing="2" border="0">
|
||||||
|
<tr>
|
||||||
|
<td style="padding-left:8px"><h:outputText value="#{msg.folder_type}" id="folderType" />:</td>
|
||||||
|
<td>
|
||||||
|
<h:selectOneMenu value="#{AdvancedSearchBean.folderType}" id="selectFolderType">
|
||||||
|
<f:selectItems value="#{AdvancedSearchBean.folderTypes}" id="folderTypes" />
|
||||||
|
</h:selectOneMenu>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="padding-left:8px"><h:outputText value="#{msg.content_type}" id="contentType" />:</td>
|
<td style="padding-left:8px"><h:outputText value="#{msg.content_type}" id="contentType" />:</td>
|
||||||
<td>
|
<td>
|
||||||
|
@@ -158,7 +158,7 @@
|
|||||||
<table cellpadding="1" cellspacing="1" border="0" width="100%">
|
<table cellpadding="1" cellspacing="1" border="0" width="100%">
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center">
|
<td align="center">
|
||||||
<h:commandButton value="#{msg.close}" action="#{TrashcanBean.close}" styleClass="wizardButton" />
|
<h:commandButton value="#{msg.close}" action="dialog:close" styleClass="wizardButton" />
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
@@ -286,7 +286,7 @@
|
|||||||
<table cellpadding="0" cellspacing="0" border="0">
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center">
|
<td align="center">
|
||||||
<h:commandButton value="#{msg.close}" action="dialog:close" styleClass="wizardButton" />
|
<h:commandButton value="#{msg.close}" action="#{TrashcanBean.close}" styleClass="wizardButton" />
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
Reference in New Issue
Block a user