سؤال

أنا جديد على الكأس ولدي مشكلة:

لدي هذا المقتطف من نظام الأفضليات المعمم:

<g:form url="[controller:'main',action:'login']"> 
  <label for="name">Usuario:</label><br/> 
  <input type="text" name="name" /><br/> 
  <label for="pass">Password:</label><br/> 
  <input type="password" name="password"/><br/> 
  <input type="submit" value="Login"/><br/> 
  <g:renderErrors bean="${cmd}"/> 
</g:form> 

يستخدم وحدة التحكم (MainController.groovy) كائن أمر ، إليك الرمز لكليهما:

def login = { LoginCommand cmd -> 
  if(cmd.validate()){ 
  redirect(action:'ok') 
  }else{ 
  render(view:'index',model:[cmd:cmd]) 
  } 
  } 

class LoginCommand { 

        String name 
        String password 

        static constraints = { 
                name(blank:false,size:5..10) 
                password(blank:false,size:5..10) 
        } 
} 

المشكلة هي أنه عندما أدخل اسمًا سيئًا أو مرورًا (فارغًا أو خارج النطاق) إنه يظهر لي 4 أخطاء ، واثنان لكلمة المرور واثنان لاسم المستخدم. هم نفسه ، ولكن مكررة.

لقد وجدت أن إنشاء طريقة "Bool ValateCommand () {name && password}" واستبدالها لـ command.validate () لا يرمي التكرارات ، لكنني أريد استخدام ميزات القيود من الكأس للحفاظ على جفاف الأشياء.

أي فكرة لماذا يحدث هذا؟ ًشكراً جزيلا!

هل كانت مفيدة؟

المحلول

عندما تقوم بحقن كائنات الأوامر في إجراءات وحدة التحكم ، تنفذ Grails validate() تلقائيا ، لذلك ليست هناك حاجة لاستدعاءها يدويا. محاولة

if(!cmd.hasErrors())

بدلاً من

if(cmd.validate())

يبدو أن كل دعوة إلى validate() يضيف أخطاء جديدة (مكررة) إلى كائن الأمر. IMHO لا ينبغي أن يحدث هذا وربما يكون خطأ في الكأس. يجب ان تراعي الإبلاغ هذه المسألة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top