2016-07-21 2 views
0

Я новичок в ATG, я создал образец регистрационной формы с полями, такими как имя, фамилия, пол и т. Д. Я хочу, чтобы эти данные сохранялись в базе данных. Я уже создал таблицу в SQL Developer, также создается профиль пользователя, но любые значения, которые я ввел, не добавляются в базу данных. Если кто-нибудь знает, пожалуйста, помогите мне. Ниже приведен пример кода:Не удалось сохранить данные в базе данных в ATG

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

+0

Вы должны сообщить нам, что вы пробовали и что не удалось. Трудно вам это помочь. –

+0

Какова модель кэширования вашего дескриптора 'item? Если кеш не отключен, вы не увидите, что данные сохраняются немедленно. – radimpe

+0

Режим кэша отключен. Можно ли сохранить данные в базу данных с помощью * QueryBuilder *? Если да, то как? –

ответ

1

Для того, чтобы только что созданный элемент хранилище настойчивый addItem (justCreatedRepositoryItem) следует вызвать метод. Поскольку вы не сохраняли свой новый элемент, вы не видите его в БД.

Также отметим, что AddItem (MutableRepositoryItem pItem) возвращает новый repositoryitem (с потенциально другой идентификатор), который представляет собой постоянный элемент в хранилище. Поэтому, чтобы увидеть изменения в обновленном БД, необходимо использовать изменения.

Смежные вопросы