Обработка ошибок пользовательского обработчика форм в ATG

Я новичок в АТГ. И я пытаюсь использовать собственный RepositoryFormHandler. Но я не могу делать проверки в форме.

Вот мой файл .java:

public class MyLoginBean extends RepositoryFormHandler {

    private String logname;
    private String logpwd;
    private String message;

    public String getLogname() {
        return logname;
    }

    public void setLogname(String logname) {
        this.logname = logname;
    }

    public String getLogpwd() {
        return logpwd;
    }

    public void setLogpwd(String logpwd) {
        this.logpwd = logpwd;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public boolean handleLogname(DynamoHttpServletRequest pRequest,
            DynamoHttpServletResponse pResponse) throws ServletException,
            IOException {
        boolean tf=true;
        if(logname.isEmpty() || logname==null)
        {
            tf=false;
            setMessage("User name can't empty");
        }

        System.out.println("inside logname");
        return tf;
    }

    public void handleFormException(DropletFormException exception,
            DynamoHttpServletRequest request, DynamoHttpServletResponse response) {
        // TODO Auto-generated method stub
        super.handleFormException(exception, request, response);
    }

}

А вот мой файл .jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/dspTaglib" prefix="dsp" %>
<dsp:importbean bean="/atg/dynamo/droplet/ErrorMessageForEach"/>
<dsp:importbean bean="/dynamusic/MyLoginBean"/>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Custom Login</title>
</head>
<body>
<dsp:form style="color:white">
    <table style="background:#3b5998">
        <tr>
            <td>
                <ul>
                    <dsp:droplet name="ErrorMessageForEach">
                        <dsp:param bean="MyLoginBean.formExceptions" name="exceptions"/>
                        <dsp:oparam name="output">
                            <li>
                                <dsp:valueof param="message"/>
                            </li>
                        </dsp:oparam>
                    </dsp:droplet>
                </ul>
            </td>
        </tr>
        <tr>
            <td>
                User Name:
            </td>
            <td>
                Password:
            </td>
        </tr>
        <tr>
            <td>
                <dsp:input type="text" name="logname" bean="MyLoginBean.logname"> </dsp:input>
            </td>
            <td>
                <dsp:input type="password" name="logpwd" bean="MyLoginBean.logpwd"> </dsp:input>
            </td>
            <td>
                <dsp:input type="submit" bean="MyLoginBean.login"> </dsp:input>
            </td>
        </tr>
    </table>
</dsp:form>
</body>
</html>

Это все, что я пробовал до сих пор, и все еще пробую что-то еще. Пожалуйста, предложите решение для этого, а также сообщите мне об ошибках, если они есть, в коде, вставленном сюда.


person Varun Jain    schedule 27.10.2014    source источник
comment
Ваш метод доступа к logname будет конфликтовать с вашим методом handleLogname, поскольку оба они будут упоминаться в форме как MyLoginBean.logname. Похоже, вы впоследствии исправили это, добавив MyLoginBean.login в JSP, но без связанного метода handle в коде Java. Также см. комментарии Патрика для получения дополнительных указаний.   -  person radimpe    schedule 28.10.2014


Ответы (1)


  1. Не переопределять handleFormException
  2. Вместо использования setMessage используйте встроенное поведение ATG. Все обработчики форм наследуют вектор исключений формы от суперкласса GenericFormHandler. Чтобы добавить ошибку, используйте:

addFormException(new DropletException("Your error message"));

Затем, в конце вашего метода, вызовите:

return checkFormRedirect(getSuccessUrl(), getFailUrl(), pRequest, pResponse);

Это проверяет, были ли добавлены какие-либо исключения формы, и если да, перенаправляется на failUrl, в противном случае перенаправляется на SuccessUrl.

  1. По соглашению вы должны назвать обработчик формы *FormHandler, например ProfileFormHandler, BillingInfoFormHandler, PaymentInfoFormHandler и т. д.

Надеюсь это поможет. См. http://docs.oracle.com/cd/E22630_01/Platform.1002/apidoc/atg/droplet/GenericFormHandler.html#getFormExceptions()

person Patrick    schedule 27.10.2014