2016-07-21 53 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-descriptor'上的缓存模型是什么?除非禁用缓存,否则不会立即看到数据持续存在。 – radimpe

+0

缓存模式仅被禁用。使用* QueryBuilder *可以将数据保存到数据库吗?如果是,如何? –

回答

1

为了使刚刚创建库项目持续应该调用addItem(justCreatedRepositoryItem)方法。由于你没有坚持你的新项目,你没有在数据库中看到它。

另请注意,addItem(MutableRepositoryItem pItem)会返回一个新的repositoryitem(可能具有不同的id),它表示存储库中的持久项目。所以要查看DB新创建的项目中的更新应该用于修改。