2012-12-27 8 views
3

매우 CFGRID (CFGRIDUPDATE 포함)를 사용하려고했지만 NULLS를 허용하지 않았습니다.Coldfusion : 간단한 cfgridupdate 유효성 검사

<cfset strWarning= ""> 

<cfif IsDefined("FORM.gridEntered")> 
    <cfif FORM.myName EQ '' OR FORM.myURL EQ ''> 
     <cfset strWarning= "Error: Form fields cannot be blank"> 
    <cfelse> 
     <cfgridupdate grid="gridSomething" 
      dataSource="qryTSQL" tableName="tblName" keyOnly="Yes"> 
    </cfif> 
</cfif> 

<cfoutput>#strWarning#</cfoutput><br /> 

<cfform> 
<cfgrid name="gridSomething" query="qryTSQL" 
     selectMode="Edit" format="HTML"> 
    <cfgridcolumn name = "myID" display="No"> 
    <cfgridcolumn name = "myName"> 
    <cfgridcolumn name = "myURL"> 
</cfgrid> 

<cfinput type="submit" name="gridEntered"> 

내가 점점 오전 오류입니다 - 오류 진단 : 복잡한 오브젝트 유형은 단순 값으로 변환 할 수 없습니다. 표현식은 변수 또는 중간 표현식 결과를 단순 값으로 요구했습니다. 그러나 결과를 간단한 값으로 변환 할 수는 없습니다. 간단한 값은 문자열, 숫자, 부울 값 및 날짜/시간 값입니다. 쿼리, 배열 및 COM 개체는 복잡한 값의 예입니다. 가장 큰 오류의 원인은 복잡한 값을 단순한 값으로 사용하려고 시도했기 때문입니다. 예를 들어 cfif 태그에서 쿼리 변수를 사용하려고했습니다.

나는이 원하는 해결책을 생각하고 있다고 생각합니다.

감사합니다.

편집 : 업데이트 오류 메시지

오류 진단 : 요소 myURL이는에서 정의되지 않는다.

Form scope - struct 

FIELDNAMES GRIDENTERED,__CFGRID__CFFORM_1__GRIDSOMETHING 
GRIDENTERED Submit Query 
GRIDSOMETHING.MYID Form scope - array 
1 1001 

GRIDSOMETHING.MYURL Form scope - array 
1 /test_d.cfm 

GRIDSOMETHING.ORIGINAL.MYID Form scope - array 
1 1001 

GRIDSOMETHING.ORIGINAL.MYURL Form scope - array 
1 /changed.cfm 

GRIDSOMETHING.ROWSTATUS.ACTION Form scope - array 
1 U 

__CFGRID__CFFORM_1__GRIDSOMETHING __CFGRID__EDIT__=2 MYID Y MYURL Y 1 U 1001 1001 /test_d.cfm /changed.cfm 
+1

을 핵심은 오류를 일으키는 변수를 찾는 것입니다. cfset 태그와 cfoutput 태그 사이의 모든 것을 주석으로 처리 한 다음 페이지를 다시 실행하는 것이 좋습니다. 오류가 발생하지 않으면 해당 변수를 식별하는 데 도움이되도록 비트 단위로 주석 처리를 제거하십시오. –

+0

전체 오류 텍스트를 추가 할 수 있습니까? (예 : 화면에서 복사하여 붙여 넣기, 개발 환경의 CFAdmin에서 "강력한 예외 처리"가 활성화되어 있는지 확인하십시오). 문제를 일으키는 정확한 선을 강조 표시해야합니다. 당신이 게시 한 코드에서 아무 것도 볼 수 없지만 오류가 발생합니다. –

답변

3

그리드는 표준 FORM 필드와 다르게 작동합니다. 그리드에는 복수 행의 데이터가 포함되어 있으므로 CF creates arrays of the new/changed values입니다. 각 격자 열의 하나는 즉

 FORM.gridname.columnName 

은 특정 컬럼에 대한 값의 어떤가 비어있는 경우, 해당 열의 배열을 통해 루프를 필요로 결정하고 각 값을 확인하려면 다음

<cfset updateCount = arrayLen(FORM.gridSomething.myName) /> 
    <cfloop from="1" to="#updateCount#" index="x"> 
     <cfset nameValue = trim(FORM.gridSomething.myName[x]) /> 
     <cfset urlValue = trim(FORM.gridSomething.myURL[x])) /> 

     <!--- one or both of the values is empty ---> 
     <cfif not len(nameValue) OR not len(urlValue)> 
      ... empty value found. do something here .... 

     </cfif> 
    </cfloop>