import javax.faces.application.ViewHandler; //导入方法依赖的package包/类
public String getOpenPageURL(String pageName, boolean readOnly) {
try {
FacesContextEx facesContext = FacesContextEx.getCurrentInstance();
StringBuilder buff = new StringBuilder();
// If there is a query string, preserve it
String qs = null;
if (StringUtil.isNotEmpty(pageName)) {
int qsPos = pageName.indexOf('?');
if(qsPos>=0) {
qs = pageName.substring(qsPos+1);
pageName = pageName.substring(0,qsPos);
}
}
if (StringUtil.isEmpty(pageName)) {
pageName = DatabaseConstants.VIRTUAL_PAGE_NAME;
}
if (pageName.startsWith("/")) {
ViewHandler viewHandler = facesContext.getApplication().getViewHandler();
pageName = viewHandler.getActionURL(facesContext, pageName);
}
buff.append(pageName).append('?'); //$NON-NLS-1$
boolean includeDatabaseName;
boolean suppressDatabaseNameParam = getBooleanProperty(facesContext,
"xsp.dominoView.url.databaseName.suppress", //$NON-NLS-1$
/*default*/false);
if( suppressDatabaseNameParam ){
// For SPR#MKEE9U9HF3 added an option to suppress the databaseName URL part.
// The xsp.properties file has explicitly suppressed the databaseName in the URL.
includeDatabaseName = false;
}else{
// MWD: no need to include databaseName parameter if this is Domino AND the dbName in the datasource is null
// SPR# EGLN92PHT6 Without the databaseName the link will default to the current database anyway
if( _wrappedObject instanceof DominoViewEntry
&& null == ((DominoViewEntry)_wrappedObject).getDatabaseName() ){
includeDatabaseName = false;
}else{
includeDatabaseName = true;
}
}
// PHIL: we use the universal ID here so we can easily transform this to an HTTP server URL
if (includeDatabaseName) {
String databaseName = getDatabaseName();
if(StringUtil.isNotEmpty(databaseName)) {
buff.append(DatabaseConstants.DATABASE_NAME).append('=').append(databaseName).append('&'); //$NON-NLS-1$ //$NON-NLS-2$
}
}
buff.append(DatabaseConstants.DOCUMENT_ID).append('=').append(getUniversalID()).append('&'); //$NON-NLS-1$ //$NON-NLS-2$
buff.append(DatabaseConstants.ACTION).append('=').append(getTarget(readOnly)); //$NON-NLS-1$ //$NON-NLS-2$
if(qs!=null) {
buff.append('&');
buff.append(qs);
}
//According to Phil there was a problem with this being double-encoded
//return URLUtil.encode(buff.toString(), "UTF-8"); //$NON-NLS-1$
return buff.toString();
} catch(NotesException ex) {
throw new FacesExceptionEx(ex);
}
}