2016-07-20 5 views
0

Ich versuche, eigene Handle-Methode für Registrierungsformular zu erstellen. Es hat nur zwei Felder Vorname und Nachname. Unten ist der Beispiel-Java-Code.Abrufen von DropletException beim Erstellen von handleMethod

public class TestProfileFormHandler extends GenericFormHandler{ 

protected ProfileTools mProfileTools; 
private MutableRepository mSampleRepository; 
private String mCreateSuccessURL; 
private String mCreateErrorURL; 
public static final String FIRST_NAME = "firstName"; 
public static final String LAST_NAME = "lastName"; 

public boolean handleCreate(DynamoHttpServletRequest pRequest,DynamoHttpServletResponse pResponse)throws ServletException,IOException{ 

    MutableRepository lSampleRepository = (MutableRepository) getSampleRepository(); 
    MutableRepositoryItem lItem = null; 
    String lFirstName = pRequest.getParameter(FIRST_NAME); 
    String lLastName = pRequest.getParameter(LAST_NAME); 
    try { 
     Repository rep = getSampleRepository(); 
     RepositoryItem lRepoItem = null; 

     lItem = lSampleRepository.createItem(lRepoItem.getRepositoryId(),"user"); 
     lItem.setPropertyValue(FIRST_NAME,lFirstName); 
     lItem.setPropertyValue(LAST_NAME, lLastName); 
     String lRepositoryId = lItem.getRepositoryId(); 
     lSampleRepository.addItem(lItem); 
    } catch (RepositoryException e) { 
     e.printStackTrace(); 
    } 

    return checkFormRedirect(getCreateSuccessURL(), getCreateErrorURL(), pRequest, pResponse); 

} 

Unterhalb der jsp ist: 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.value.firstName" /> 
    </div> 
    <div> 
     <label>Last Name</label> <span>*: </span> 
     <dsp:input type="text" name="lastName" bean="TestProfileFormHandler.value.lastName" /> 
    </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> 

jetzt bin ich DropletException

atg.droplet.DropletException: Can't find property: firstName in class com.tap.userprofiling.TestProfileFormHandler 
at atg.droplet.DropletDescriptor.<init>(DropletDescriptor.java:813) 
at atg.droplet.validation.ValidatingDropletDescriptorManager$ValidationDropletDescriptor.<init>(ValidatingDropletDescriptorManager.java:416) 
at atg.droplet.validation.ValidatingDropletDescriptorManager.createDropletDescriptor(ValidatingDropletDescriptorManager.java:219) 
at atg.droplet.DropletDescriptorManager.getDropletDescriptor(DropletDescriptorManager.java:1279) 
at atg.droplet.DropletDescriptorManager.getDropletDescriptor(DropletDescriptorManager.java:1232) 
Truncated. see log file for complete stacktrace 

bekommen, wenn jemand weiß, was dieser Fehler ist, bitte hilf mir.

Vielen Dank im Voraus.

+0

Warum benutzen Sie nicht den OOTB ProfileFormHandler, der all diese Funktionalität bereits eingebaut hat? Scheint so, als ob Sie eine Menge Zeit damit verschwenden, das Rad neu zu erfinden! – bated

Antwort

0

Es gibt ein paar Probleme, die ich hier sehen kann. Erstens versuchen Sie, eine "Wert" -Karte für die Übertragung Ihrer Eigenschaftswerte zwischen Ihrer JSP-Seite und Ihrem formhandler zu verwenden, aber Sie haben keine value-Eigenschaft, die in Ihrem formhandler definiert ist, und auch keine Accessoren. Wenn Sie das Standardverzeichnis ProfileFormHandler erweitern würden, hätten Sie Zugriff auf das Verzeichnis value erhalten, aber seien Sie vorsichtig, da einige Elemente im Wörterbuch explizit verwendet werden.

Mit dem oben genannten gekoppelt sind Sie im Wesentlichen eine POST auf TestFormHandler.value.firstName aber einfach versuchen, firstName aus der Anfrage zu lesen. Es gibt keine firstName auf die Anfrage, die wahrscheinlich zu Ihrem Fehler führt.

Ein weiteres Problem ist, dass Sie keine Eigenschaftswerte in einem FormHandler mit dem request Objekt festlegen sollten. Sie sollten dies stattdessen über Accessoren auf den einzelnen Eigenschaften tun. (Beste Übung).

+0

Hey danke für deine Antwort, anstatt Value-Wörterbuch zu verwenden, habe ich nur die Variablen firstName und lastName in der Java-Datei erstellt und Setter und Getter erstellt. Diese Methode hat für meinen Code funktioniert. –

+0

Nun wurde das DropletException-Problem behoben, aber die Daten werden nicht in der Datenbank festgelegt. Artikel schafft, aber ich kann es nirgends sehen. –