Невозможно сохранить данные в базе данных в ATG
Я новичок в ATG, я создал образец регистрационной формы с полями, такими как имя, фамилия, пол и т. Д. Я хочу, чтобы эти данные были сохранены в базе данных. Я уже создал таблицу в SQL Developer, также создается профиль пользователя, но любые введенные значения не добавляются в базу данных. Если кто-нибудь знает, пожалуйста, помогите мне. Ниже приведен пример кода:
TestProfileFormHandler.java
public class TestProfileFormHandler extends GenericFormHandler{
protected ProfileTools mProfileTools;
private MutableRepository mSampleRepository;
private String mFirstName;
private String mLastName;
private String mLogin;
private String mCreateSuccessURL;
private String mCreateErrorURL;
private String mProfileType = "user";
private String mRepositoryId;
public boolean handleCreate(DynamoHttpServletRequest pRequest,DynamoHttpServletResponse pResponse)throws ServletException,IOException,RepositoryException{
RepositoryItem newUser = createUser(pRequest,pResponse);
if(newUser!=null){
setRepositoryId(newUser.getRepositoryId());
}
return checkFormRedirect(getCreateSuccessURL(), getCreateErrorURL(), pRequest, pResponse);
}
protected RepositoryItem createUser(DynamoHttpServletRequest pRequest,DynamoHttpServletResponse pResponse)throws ServletException,IOException,RepositoryException{
MutableRepository lSampleRepository = (MutableRepository) getSampleRepository();
MutableRepositoryItem lItem = null;
RepositoryItem lRepoItem = null;
String lLogin = getLogin();
lItem = createProfileItem(pRequest,pResponse);
lItem.setPropertyValue("firstName",getFirstName());
lItem.setPropertyValue("lastName", getLastName());
lItem.setPropertyValue("login", getLogin());
lSampleRepository.updateItem(lItem);
return lSampleRepository.getItem(lItem.getRepositoryId(), getProfileType());
}
protected MutableRepositoryItem createProfileItem(DynamoHttpServletRequest pRequest,DynamoHttpServletResponse pResponse)throws ServletException,IOException,RepositoryException{
MutableRepository lProfile = getSampleRepository();
MutableRepositoryItem lMutItem = null;
RepositoryItem lCurrentUser = lProfile.createItem(getProfileType());
String lProfileId = lCurrentUser.getRepositoryId();
lMutItem = lProfile.getItemForUpdate(lProfileId,getProfileType());
return lMutItem;
}
register.jsp
<dsp:page>
<dsp:importbean bean="/atg/userprofiling/TestProfileFormHandler"/>
<dsp:getvalueof id="success" param="added"/>
<c:if test="${success eq true}">
Account created successfully.
</c:if>
<dsp:form name="registerForm" id="registerForm" method="post">
<div>
<label>First Name</label> <span>*: </span>
<dsp:input type="text" name="firstName" bean="TestProfileFormHandler.firstName" />
</div>
<div>
<label>Last Name</label> <span>*: </span>
<dsp:input type="text" name="lastName" bean="TestProfileFormHandler.lastName" />
</div>
<div>
<label>Email Address</</label><span>*:</span>
<dsp:input type="text" name="login" bean="TestProfileFormHandler.login" />
</div>
<dsp:input type="hidden" value="/test/register.jsp?added=true" bean="TestProfileFormHandler.createSuccessURL"/>
<dsp:input type="hidden" value="/test/register.jsp?added=false" bean="TestProfileFormHandler.createErrorURL"/>
<dsp:input type="submit" value="Create Account" bean="TestProfileFormHandler.create"/>
</dsp:form>
TestProfileFormHandler.properties $class=com.tap.userprofiling.TestProfileFormHandler
$scope=global
sampleRepository=/com/tap/repository/SampleRepository
dataSource=/atg/dynamo/service/jdbc/JTDataSource
1 ответ
Чтобы сделать только что созданный элемент репозитория постоянным, необходимо вызвать метод addItem(justCreatedRepositoryItem). Поскольку вы не сохранили свой новый элемент, вы не увидите его в БД.
Также обратите внимание, что addItem(MutableRepositoryItem pItem) возвращает новый репозиторий (с потенциально другим идентификатором), который представляет постоянный элемент в репозитории. Таким образом, чтобы увидеть обновления в БД, новый элемент должен быть использован для изменений.