Java Web应用程序表单验证实现

时间:2010-11-18 20:40:08

标签: java model-view-controller web-applications

我必须在Java Web应用程序的表单字段中添加其他验证规则。 我有一个规则来验证输入的表单字段值是否是有效的员工ID。

但是现在我想验证这个值是表单/ web用户的员工ID还是表单/ web用户的员工。换句话说,员工可以针对他们自己的员工ID输入事件,并且主管可以针对他们自己的员工ID以及他们监督徽章的员工的ID输入事件。这就是我所拥有的。

public Object insert(HttpServletRequest request) {
    OopEvent event = new OopEvent();
    STKUser authenticatedUser = (STKUser) request.getSession().getAttribute("STKUserSession");

    try {
        // populate bean with setters
        processEventBadge (request, event);
        processEventEventTypeID(request, event);
        processEventStartDate (request, event);
        processEventEndDate (request, event);
        processEventHours (request, event);
        if (isSucces()) {
            EventDAO.insert(event, authenticatedUser);
        }
        else {
            setError(FORM_RESULTS, "Error - There are error(s) in your input. See below.");
            LOGGERI.log(Level.INFO, "Form input errors inserting OopEvent", authenticatedUser);
        }
    } catch (DAOException e) {
        setError(FORM_RESULTS, e.getMessage());
    }
    return event;
}


// Field processors
// ---------------------------------------------------------------------------

public void processEventBadge(HttpServletRequest request, OopEvent event) throws DAOException {
    String _badge = FormUtil.getFieldValue(request, FIELD_BADGE);
    if (!"".equals(_badge) && _badge != null) {
        try {
            event.setBadge(_badge);
            event.setEventUser(STKUserDAO.getValidEmployeeByBadge(_badge)); //Returns user bean
//should make a call to validate event employee ID HERE?????????? If so I need the send eventUser and authenticatedUser but authenticatedUser is not available here only the eventUser (only if the badge number is of a valid employee)
        }
        catch (ValidatorException e) {
            setError(FIELD_BADGE, e.getMessage());
        }
        catch (DAOException e) {
            setError(FIELD_BADGE, e.getMessage());
            throw new DAOException(e.getMessage());
        }
    }
    else {
         setError(FIELD_BADGE, "OopEvent Owner badge is required");
    }
}

我应该在insert方法,processEventBadge还是validateEventBadge方法中实现此逻辑?或者别的地方??我想我应该在processEventBadge中调用一个validateEventBadge方法,但这需要我将authenticatedUser对象传递给两个方法。用户对象包含员工ID和主管员工ID。因此,我可以通过比较两个对象来确保登录用户监督事件。

1 个答案:

答案 0 :(得分:0)

你提到的最后一件事听起来不错。

我还会在processEventBadge中调用一个validateEventBadge方法。

传递用户对象很容易。