Results 1 to 8 of 8

Thread: Server validation

  1. #1
    Sencha User
    Join Date
    Apr 2013
    Posts
    32

    Default Answered: Server validation

    I need to check if username is alredy taken. This unique check can only be done on the server side.
    Is ti posible to do such a validation ?

  2. I thought you might say that, there really has to be a better way to do this but what you could do as a work around is have the call back of that rpc call another method that does something like this:

    Code:
        public TextField buildTextFieldWidget(boolean nameUnique) {
            if(nameUnique){
                 nameField.forceInvalid("Name must be unique");
           }
        }

  3. #2
    Sencha User
    Join Date
    May 2011
    Posts
    51
    Answers
    2

    Default

    What we do to validate the username is make and RPC call down to the server that performs a count on the associated table for that username, if the value comes back >=1 we return a false validation, and if it returns as 0 then we return true and let the user continue.

  4. #3
    Sencha User
    Join Date
    Apr 2013
    Posts
    32

    Default

    Quote Originally Posted by nmb1106 View Post
    What we do to validate the username is make and RPC call down to the server that performs a count on the associated table for that username, if the value comes back >=1 we return a false validation, and if it returns as 0 then we return true and let the user continue.
    can you post some code example

  5. #4
    Sencha User
    Join Date
    May 2011
    Posts
    51
    Answers
    2

    Default

    Using a standard RPC call similar to: (We build our rpc's using a factory that is not important)
    Code:
            CustomRPCFactory.getJobService(true).checkJobNameUnique(null, jobName.getValue(), new CustomAsyncCallback<Boolean>() {
                @Override
                public void onSuccess(final Boolean result)
                {
                    if (result)
                    {
                        saveJobDetails();
                    }
                    else
                    {
                        MessageBox.alert("Add Job", "Job name must be unique.", null);
                    }
                }
            });
    Here is the underlying service that ithe above method is calling:

    Code:
        /**
         * Checks to see if there are any existing job masters (not including itself) with a name matching the name parameter.
         *
         * @param code
         * @param name
         * @return
         */
        public boolean checkJobNameUnique(Long code, String name)
        {
            final Long count = (Long) jobDaoExt.countWithMatchingName(code, name);
            if (count > 0)
            {
                return false;
            }
    
            return true;
        }
    Then here is the countWithMatchingName method inside the hibernate DAO:

    Code:
        public Object countWithMatchingName(final Long code, final String name)
        {
            String queryString = "select count(model) from job model where model.jobName = :name";
    
            if (code != null)
            {
                queryString += " and model.jobCode <> :code";
            }
    
            queryString += " and model.jobDeleted <> 'Y'";
    
            final Query query = entityManager.createQuery(queryString);
    
            query.setParameter("name", name);
    
            if(code!=null){
                query.setParameter("code", code);
            }
    
            return query.getSingleResult();
        }

  6. #5
    Sencha User
    Join Date
    Apr 2013
    Posts
    32

    Default

    i understend you approtch, but thats not what.
    i want the option if the user cliks out of the field(onBluer), that the server validat !
    And i want a regular validation like this.
    Attachment 46479

    i don't want some messages popping up, like in you example : MessageBox.alert("Add Job", "Job name must be unique.", null);

  7. #6
    Sencha User
    Join Date
    May 2011
    Posts
    51
    Answers
    2

    Default

    Stick the rpc call inside of a custom validator: (I'm not sure if this is the best way to do this, there has to be a better way but this would work)

    Code:
        private class UniqueNameValidator extends AbstractValidator<String> {
    
            @Override
            public List<EditorError> validate(final Editor<String> editor, final String value) {
                final List<EditorError> errors = new ArrayList<EditorError>();
                if (value != null) {
    
            CustomRPCFactory.getJobService(true).checkJobNameUnique(null, value, new CustomAsyncCallback<Boolean>() {
                @Override
                public void onSuccess(final Boolean result)
                {
                    if (!result)
                    {
                        errors = createError(editor, "Name must be unique", value);
                    }
                }
            });            
    
        return errors;
    
            }
    
        }
    Then you would just add an instance of this validator to your field.

  8. #7
    Sencha User
    Join Date
    Apr 2013
    Posts
    32

    Default

    is not workign that way:
    return errors; is always executed before the RPC call finished

  9. #8
    Sencha User
    Join Date
    May 2011
    Posts
    51
    Answers
    2

    Default

    I thought you might say that, there really has to be a better way to do this but what you could do as a work around is have the call back of that rpc call another method that does something like this:

    Code:
        public TextField buildTextFieldWidget(boolean nameUnique) {
            if(nameUnique){
                 nameField.forceInvalid("Name must be unique");
           }
        }

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •