Обработка ошибок пользовательского обработчика форм в 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)


arrow_upward
7
arrow_downward

  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