2015-12-16 32 views
0

我正在使用CFWheels進行表單驗證。我在這兩個對象模型中都有presenseOf()驗證檢查。我有一個帶有文本框和一組單選按鈕的表單。CFWheels:Form Helper單選按鈕

但是,如果我將表格提交爲空,則主管驗證工作,但用戶清單驗證不起作用。它給出了錯誤;

「uchecklist」未在params變量中定義。我注意到,當提交表單時,params結構體具有「supervisor [name]」對象,但它是空的,但它甚至沒有「uchecklist [cstatus]」對象。此外,只有當我選擇其中一個單選按鈕時,纔會使用該單選按鈕的值提交「uchecklist [cstatus]」對象。

我需要驗證,如果至少有一個單選按鈕是選擇,我來賓這個功能是不同於空的文本框驗證。

有人可以告訴我一個單選按鈕是如何使用CFWheels窗體幫助器進行驗證的。

控制器

public function t_validate() 
     { 
      title = "Home"; 
      supervisor = model("supervisors"); 
      uchecklist = model("user_checklist"); 


     } 

     public function t_validate_complete() 
     { 
      title = "Home"; 

      supervisor = model("supervisors").new(params.supervisor); 
      supervisor.save(); 

      uchecklist = model("user_checklist").new(params.uchecklist); 
      uchecklist.save(); 

      renderPage(action="t_validate"); 
     } 

查看

<cfoutput> 
<cfdump var="#params#"> 

#errorMessagesFor("supervisor")# 

#startFormTag(action="t_validate_complete")# 

    <div> 
     <label for="">Supervisor:</label> 
     <input name="supervisor[name]" value="" /> 
    </div> 

    <fieldset> 

     <input type="radio" name="uchecklist[cstatus]" value="1" /> 
     <label for="profile-eyeColorId-2">Blue</label><br /> 

     <input type="radio" name="uchecklist[cstatus]" value="2" /> 
     <label for="profile-eyeColorId-1">Brown</label><br /> 

     <input type="radio" name="uchecklist[cstatus]" value="3" /> 
     <label for="profile-eyeColorId-3">Hazel</label><br /> 

    </fieldset> 

    <div> 
     <input type="submit" value="Save Changes" /> 
    </div> 

#endFormTag()# 

</cfoutput> 

回答

0

未經檢查的單選按鈕,將沒有數據提交到服務器。這不是ColdFusion或CFWheels的獨特問題。

要解決,你的控制器動作的開始提供了該結構的默認值:

public function t_validate_complete() 
{ 
    // Provides an empty struct for the model to consume if none of the radio buttons are checked. 
    param name="params.uchecklist" type="struct" default="#StructNew()#"; 

    title = "Home"; 

    supervisor = model("supervisors").new(params.supervisor); 
    supervisor.save(); 

    uchecklist = model("user_checklist").new(params.uchecklist); 
    uchecklist.save(); 

    renderPage(action="t_validate"); 
}