OpenCms 如何创建 Front-end editing

想要自己写一个login和editor页面,可以让用户直接登录就可以编辑某个页面。从网上找到了一段登陆的代码:

<%@ page session="true" import="org.opencms.main.*, org.opencms.jsp.*,org.opencms.file.*, java.lang.String" %>
<% CmsJspActionElement cms = new CmsJspActionElement(pageContext,request,response);
 
String user = request.getParameter("user");
String password = request.getParameter("password");
String url = request.getParameter("url");
 
if(url==null || url.length()==0 || url.equalsIgnoreCase("null")) url = "";
 
boolean loginFailed = false;
 
//form was submitted => try to log in and redirect to given URl
if((user != null) && (user.length() != 0)) {
	try{
		CmsObject cmsObject = cms.getCmsObject();
		cmsObject.loginUser(user, password);
		CmsProject cmsproject = cmsObject.readProject("Offline");
		cmsObject.getRequestContext().setCurrentProject(cmsproject);
		cmsObject.getRequestContext().setSiteRoot("/sites/default/");
 
		//login successful - redirect to given URL
		response.sendRedirect(url);
 
	} catch ( CmsException e ) {
		loginFailed = true;
	}
}
%>
 
<%
//no user submitted or login failed => show login form
if(user==null || user.length()==0 || loginFailed) {
%>
	<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
	<html>
	<head>
		<title>Frontend login</title>
	</head>
	<body οnlοad="document.forms[0].elements[0].focus()">
<%
	if (loginFailed) {
%>
		<em>Login failed!</em>
<%
	}
%>
	<h1>please login:</h1>
	<form method="post" action="<%=cms.info("opencms.url")%>">
		<input type="hidden" name="url" value="<%=url%>" />
		<p>username: <input name="user" /></p>
		<p>password: <input name="password" type="password" /></p>
		<p><input type="submit" /></p>
	</form>
	</body>
	</html>
<%
}
%>
登陆成功了,可是opencms却不让我编辑页面,只能编辑/site/default/下的资源。一开始以为是
cmsObject.getRequestContext().setSiteRoot("/sites/default/");

引起的,可是把root设置到'/site/mysite/'却还是不行,没办法,我只好调试opencms的源代码,发现每次跳转到新的页面,site root 都会被定到"/site/default/",而我要的文件在/site/mysite/下面,为什么会这样呢?后来开到org.opencms.workplace.CmsLoginHelper.login方法后发现原来少了这段代码:

// only for workplace users, so that direct edit works
        if (OpenCms.getRoleManager().hasRole(getCms(), CmsRole.WORKPLACE_USER)) {
            // get / create the workplace settings 
            CmsWorkplaceSettings wpSettings = getSettings();
            if (wpSettings == null) {
                // create the settings object
                wpSettings = new CmsWorkplaceSettings();
                wpSettings = initWorkplaceSettings(getCms(), wpSettings, false);
            }
            // set the settings for the workplace
            wpSettings.setSite(getCms().getRequestContext().getSiteRoot());
            wpSettings.setProject(getCms().getRequestContext().currentProject().getUuid());
            wpSettings.setUser(getCms().getRequestContext().currentUser());
            HttpSession session = getJsp().getRequest().getSession(true);
            storeSettings(session, wpSettings);
        }

 原来我没有把siteRoot设置到session里面,所以每次条到新的jsp页面siteRoot就会被重置了。希望有这方面需求的兄弟看完可以有点启示,不用再挣扎了。

这里是我写的代码:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ page import="org.opencms.jsp.*, org.opencms.main.*, org.opencms.file.*, java.lang.String, org.opencms.workplace.*" %>
<%
String uri = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort();
String userName = request.getParameter("name");
String password = request.getParameter("password");
String projectName = "Offline";

try{
	
	new CmsLoginHelper(pageContext,request,response).login(userName, password, projectName, "/sites/mysite", "news/news_1.html");
	response.sendRedirect("/opencms/opencms/system/workplace/editors/editor.jsp?resourcelist=&resource=news%2Fnews_1.html");

} catch (Exception e) {
	System.out.println("Can' t login user " + userName + ": " + e);
	e.printStackTrace();
	// Redirect to error-Site
	response.sendRedirect(uri+request.getParameter("errorUri"));
}
%>
 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值