Подключение к хранилищу Hippo CMS
Я все еще пытаюсь добраться до хранилища, чтобы добавить новых пользователей. Мой компонент связан со стороной, и у меня есть все необходимое значение в FormMap.
Проблема в том, что я не знаю, как это сделать. В моем последнем вопросе Регистрация пользователей в Hippo CMS я получил ответ, что мне нужно подключить компонент к /hippo:configuration/hippo:users.
Как сделать?
Это мой фактический компонент:
package org.example.components;
import javax.jcr.Session;
import org.hippoecm.hst.component.support.bean.BaseHstComponent;
import org.hippoecm.hst.core.component.HstComponentException;
import org.hippoecm.hst.core.component.HstRequest;
import org.hippoecm.hst.core.component.HstResponse;
import org.hippoecm.hst.component.support.forms.FormMap;
import org.hippoecm.hst.component.support.forms.FormUtils;
import org.hippoecm.hst.component.support.forms.FormField;
import org.hippoecm.hst.content.annotations.Persistable;
import org.hippoecm.hst.content.beans.Node;
import org.hippoecm.hst.content.beans.standard.HippoFolderBean;
public class SignUpComponent extends BaseHstComponent {
@Override
public void doBeforeRender(HstRequest request, HstResponse response) {
super.doBeforeRender(request, response);
}
@Persistable
@Override
public void doAction(HstRequest request, HstResponse response) throws HstComponentException {
FormMap map = new FormMap(request, new String[]{"username","email","password"});
FormField username = map.getField("username");
FormField password = map.getField("password");
FormField email = map.getField("email");
try {
// NOTE: This session will be logged out automatically in the normal HST request processing thread.
Session persistableSession = request.getRequestContext().getSession();
} catch (Exception e) {
}
Node users = persistableSession.getNode("/hippo:configuration/hippo:users");
}
Хотя узел импорта не работает
error: cannot find symbol
Я тоже пробовал
Node users = getSiteContentBaseBean(request).getNode().getSession().getRootNode().getNode("/hippo:configuration/hippo:users");
1 ответ
Хорошо для сохранения изменений в документе работает следующий код. Я как бы изменил это к твоему примеру.
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import org.hippoecm.hst.component.support.bean.BaseHstComponent;
import org.hippoecm.hst.core.component.HstComponentException;
import org.hippoecm.hst.core.component.HstRequest;
import org.hippoecm.hst.core.component.HstResponse;
import org.hippoecm.repository.api.HippoNodeType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class PersistenceExampleComponent extends BaseHstComponent {
public static final Logger log = LoggerFactory.getLogger(PersistenceExampleComponent.class);
public static final String USERS_PATH = "/hippo:configuration/hippo:users";
@Override
public void doAction(final HstRequest request, final HstResponse response) throws HstComponentException {
Session writableSession = null;
try {
writableSession = this.getPersistableSession(request);
Node usersNode = writableSession.getRootNode().getNode(USERS_PATH);
final Node someusername = usersNode.addNode("someusername", HippoNodeType.NT_USER);
writableSession.save();
} catch (RepositoryException e) {
log.error(e.getMessage());
} finally {
if(writableSession != null) {
writableSession.logout();
}
}
}
}
Теперь вам нужно знать, что по умолчанию пользователь, с которым сайт подключается к хранилищу, может не иметь необходимых прав для записи в эту папку. Возможно, вы захотите прочитать страницу "Права доступа" для записей, основанных на HST, и, если этого недостаточно, вам нужно будет изучить концепцию безопасности хранилища и его доменов, чтобы изменить существующие домены в соответствии с вашими потребностями.
Вы также можете взглянуть на следующий фрагмент кода, который является примером того, как сохранить информацию из компонента в хранилище.