cmsjspcontentaccessbean.java
来自「找了很久才找到到源代码」· Java 代码 · 共 619 行 · 第 1/2 页
JAVA
619 行
/**
* Creates a content access bean based on an XML content object.<p>
*
* @param cms the OpenCms context of the current user
* @param locale the Locale to use when accessing the content
* @param content the content to access
*/
public CmsJspContentAccessBean(CmsObject cms, Locale locale, I_CmsXmlDocument content) {
init(cms, locale, content, content.getFile());
}
/**
* Returns the OpenCms user context this bean was initialized with.<p>
*
* @return the OpenCms user context this bean was initialized with
*/
public CmsObject getCmsObject() {
return m_cms;
}
/**
* Returns the raw VFS file object the content accessed by this bean was created from.<p>
*
* This can be used to access information from the raw file on a JSP.<p>
*
* Usage example on a JSP with the JSTL:<pre>
* <cms:contentload ... >
* <cms:contentaccess var="content" />
* Root path of the resource: ${content.file.rootPath}
* </cms:contentload></pre>
*
* @return the raw VFS file object the content accessed by this bean was created from
*/
public CmsFile getFile() {
return getRawContent().getFile();
}
/**
* Returns the site path of the current resource, that is the result of
* {@link CmsObject#getSitePath(CmsResource)} with the resource
* obtained by {@link #getFile()}.<p>
*
* Usage example on a JSP with the JSTL:<pre>
* <cms:contentload ... >
* <cms:contentaccess var="content" />
* Site path of the resource: "${content.filename}";
* </cms:contentload></pre>
*
* @return the site path of the current resource
*
* @see CmsObject#getSitePath(CmsResource)
*/
public String getFilename() {
return m_cms.getSitePath(getRawContent().getFile());
}
/**
* Returns a lazy initialized Map that provides Booleans that indicate if a specified Locale is available
* in the XML content.<p>
*
* The provided Map key is assumed to be a String that represents a Locale.<p>
*
* Usage example on a JSP with the JSTL:<pre>
* <cms:contentload ... >
* <cms:contentaccess var="content" />
* <c:if test="${content.hasLocale['de']}" >
* The content has a "de" Locale!
* </c:if>
* </cms:contentload></pre>
*
* @return a lazy initialized Map that provides Booleans that indicate if a specified Locale is available
* in the XML content
*/
public Map getHasLocale() {
if (m_hasLocale == null) {
m_hasLocale = LazyMap.decorate(new HashMap(), new CmsHasLocaleTransformer());
}
return m_hasLocale;
}
/**
* Returns a lazy initialized Map that provides a Map that provides Booleans that
* indicate if a value (xpath) is available in the XML content in the selected locale.<p>
*
* The first provided Map key is assumed to be a String that represents the Locale,
* the second provided Map key is assumed to be a String that represents the xpath to the value.<p>
*
* Usage example on a JSP with the JSTL:<pre>
* <cms:contentload ... >
* <cms:contentaccess var="content" />
* <c:if test="${content.hasLocaleValue['de']['Title']}" >
* The content has a "Title" value in the "de" Locale!
* </c:if>
* </cms:contentload></pre>
*
* Please note that you can also test if a locale value exists like this:<pre>
* <c:if test="${content.value['de']['Title'].exists}" > ... </c:if></pre>
*
* @return a lazy initialized Map that provides a Map that provides Booleans that
* indicate if a value (xpath) is available in the XML content in the selected locale
*
* @see #getHasValue()
*/
public Map getHasLocaleValue() {
if (m_hasLocaleValue == null) {
m_hasLocaleValue = LazyMap.decorate(new HashMap(), new CmsHasLocaleValueTransformer());
}
return m_hasLocaleValue;
}
/**
* Returns a lazy initialized Map that provides Booleans that
* indicate if a value (xpath) is available in the XML content in the current locale.<p>
*
* The provided Map key is assumed to be a String that represents the xpath to the value.<p>
*
* Usage example on a JSP with the JSTL:<pre>
* <cms:contentload ... >
* <cms:contentaccess var="content" />
* <c:if test="${content.hasValue['Title']}" >
* The content has a "Title" value in the current locale!
* </c:if>
* </cms:contentload></pre>
*
* Please note that you can also test if a value exists like this:<pre>
* <c:if test="${content.value['Title'].exists}" > ... </c:if></pre>
*
* @return a lazy initialized Map that provides Booleans that
* indicate if a value (xpath) is available in the XML content in the current locale
*
* @see #getHasLocaleValue()
*/
public Map getHasValue() {
return (Map)getHasLocaleValue().get(m_locale);
}
/**
* Returns the Locale this bean was initialized with.<p>
*
* @return the locale this bean was initialized with
*/
public Locale getLocale() {
return m_locale;
}
/**
* Returns a lazy initialized Map that provides a Map that provides
* values from the XML content in the selected locale.<p>
*
* The first provided Map key is assumed to be a String that represents the Locale,
* the second provided Map key is assumed to be a String that represents the xpath to the value.<p>
*
* Usage example on a JSP with the JSTL:<pre>
* <cms:contentload ... >
* <cms:contentaccess var="content" />
* The Title in Locale "de": ${content.localeValue['de']['Title']}
* </cms:contentload></pre>
*
* @return a lazy initialized Map that provides a Map that provides
* values from the XML content in the selected locale
*
* @see #getValue()
*/
public Map getLocaleValue() {
if (m_localeValue == null) {
m_localeValue = LazyMap.decorate(new HashMap(), new CmsLocaleValueTransformer());
}
return m_localeValue;
}
/**
* Returns a lazy initialized Map that provides a Map that provides Lists of values
* from the XML content in the selected locale.<p>
*
* The first provided Map key is assumed to be a String that represents the Locale,
* the second provided Map key is assumed to be a String that represents the xpath to the value.<p>
*
* Usage example on a JSP with the JSTL:<pre>
* <cms:contentload ... >
* <cms:contentaccess var="content" />
* <c:forEach var="teaser" items="${content.localeValueList['de']['Teaser']}">
* ${teaser}
* </c:forEach>
* </cms:contentload></pre>
*
* @return a lazy initialized Map that provides a Map that provides Lists of values
* from the XML content in the selected locale
*
* @see #getLocaleValue()
*/
public Map getLocaleValueList() {
if (m_localeValueList == null) {
m_localeValueList = LazyMap.decorate(new HashMap(), new CmsLocaleValueListTransformer());
}
return m_localeValueList;
}
/**
* Returns the raw XML content object that is accessed by this bean.<p>
*
* @return the raw XML content object that is accessed by this bean
*/
public I_CmsXmlDocument getRawContent() {
if (m_content == null) {
// content has not been provided, must unmarshal XML first
CmsFile file;
try {
file = m_cms.readFile(m_resource);
if (CmsResourceTypeXmlPage.isXmlPage(file)) {
// this is an XML page
m_content = CmsXmlPageFactory.unmarshal(m_cms, file);
} else {
// this is an XML content
m_content = CmsXmlContentFactory.unmarshal(m_cms, file);
}
} catch (CmsException e) {
// this usually should not happen, as the resource already has been read by the current user
// and we just upgrade it to a File
throw new CmsRuntimeException(Messages.get().container(
Messages.ERR_XML_CONTENT_UNMARSHAL_1,
m_resource.getRootPath()), e);
}
}
return m_content;
}
/**
* Returns a lazy initialized Map that provides values from the XML content in the current locale.<p>
*
* The provided Map key is assumed to be a String that represents the xpath to the value.<p>
*
* Usage example on a JSP with the JSTL:<pre>
* <cms:contentload ... >
* <cms:contentaccess var="content" />
* The Title: ${content.value['Title']}
* </cms:contentload></pre>
*
* @return a lazy initialized Map that provides values from the XML content in the current locale
*
* @see #getLocaleValue()
*/
public Map getValue() {
return (Map)getLocaleValue().get(m_locale);
}
/**
* Returns a lazy initialized Map that provides Lists of values from the XML content in the current locale.<p>
*
* The provided Map key is assumed to be a String that represents the xpath to the value.
* Use this method in case you want to iterate over a List of values form the XML content.<p>
*
* Usage example on a JSP with the JSTL:<pre>
* <cms:contentload ... >
* <cms:contentaccess var="content" />
* <c:forEach var="teaser" items="${content.valueList['Teaser']}">
* ${teaser}
* </c:forEach>
* </cms:contentload></pre>
*
* @return a lazy initialized Map that provides Lists of values from the XML content in the current locale
*
* @see #getLocaleValueList()
*/
public Map getValueList() {
return (Map)getLocaleValueList().get(m_locale);
}
/**
* Returns an instance of a VFS access bean,
* initialized with the OpenCms user context this bean was created with.<p>
*
* @return an instance of a VFS access bean,
* initialized with the OpenCms user context this bean was created with
*/
public CmsJspVfsAccessBean getVfs() {
return CmsJspVfsAccessBean.create(m_cms);
}
/**
* Initialize this instance.<p>
*
* @param cms the OpenCms context of the current user
* @param locale the Locale to use when accessing the content
* @param content the XML content to access
* @param resource the resource to create the content from
*/
public void init(CmsObject cms, Locale locale, I_CmsXmlDocument content, CmsResource resource) {
m_cms = cms;
m_locale = locale;
m_content = content;
m_resource = resource;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?