这门课程我还是新手。有人可以帮我解决复杂对象类型无法转换为简单值的问题吗?
下面是代码:
<td name="" style="text-align: center;" width="130px">
<cfoutput>
<cfquery name="str1" datasource="abcd">
SELECT Verifyby
FROM str
</cfquery>
<form action="" method="post">
<cfquery datasource="abcd" name="sign">
SELECT Sign
FROM sign
</cfquery>
</form>
<cfset str1.Verifyby = '#Sign#'>
<cfset #Verifyby# = str1.Verifyby>
<cfif #Verifyby# eq ''>
<input type="checkbox" id="myCheck" value="#Sign#" onclick="submit()">
<cfelse>
<p>#Verifyby#</p>
</cfif>
</cfoutput>
</td>
答案 0 :(得分:1)
好。您的代码只需要一点点改进
问题:
出现错误的原因是,您试图将整个查询的值读为“简单值”,在这种情况下为字符串:
<cfset str1.Verifyby = '#Sign#'>
我还将重组部分代码,以便所有业务逻辑(在这种情况下,查询)都在HTML之上。然后将条件子句的第一个分支放在:
<form>
它更容易阅读,并尽量避免不必要地使用“#”符号。
我也倾向于使用:
Len(Trim(variables.someVariable))
在测试空字符串时,如果在相等性测试中出现了多余的空格(除非您需要包括空格),除非您需要包含空格。
此外,请记住要对变量进行范围限定。所以:
<cfset verifyby = qStr1.Verifyby>
应该是:
<cfset variables.verifyby = qStr1.Verifyby>
否则,Coldfusion必须使用优先级例程来确定变量可能在哪个范围内,这会花费额外的时间。
但是,正如 Ageax 所指出的那样,最好直接在此处使用查询列引用。
所以,这是解决方法:
<cfquery name="str1" datasource="DHRMS">
SELECT Verifyby
FROM str
</cfquery>
<cfquery datasource="DHRMS" name="sign">
SELECT Sign
FROM signM
</cfquery>
<td style="text-align: center;" width="130px">
<cfoutput>
<cfif NOT Len(Trim(qStr1.Verifyby))>
<form action="save_HOD-staff" method="post">
<input type="checkbox" id="myCheck" value="#qSign.Sign#" onclick="submit()">
</form>
<cfelse>
<p>#qStr1.Verifyby#</p>
</cfif>
</cfoutput>
</td>
答案 1 :(得分:0)
<cfset str1.Verifyby = '#Sign#'>
<cfset #Verifyby# = str1.Verifyby>
应阅读:
<cfset str1.Verifyby = Sign.sign />
<cfset Verifyby = str1.Verifyby />
您将您的查询结果对象包装在字符串中,然后尝试将其输出为字符串,这是不合法的,因为它是复杂的对象。假设您需要查询的列的值,则需要在查询结果中引用该列。
如果要证明它是一个复杂的对象,请在cfquery下方添加以下代码:
<cfdump var='#sign#' abort='true'/>
也就是说,此代码还有很多错误。下面的代码应该运行;但这并不意味着将按照您的意愿进行。
<td style="text-align: center;" width="130px">
<cfoutput>
<!--- Get the current verifyBy value, but not using? --->
<cfquery name="currentVerifyBy" datasource="DHRMS">
SELECT Verifyby
FROM str
</cfquery>
<cfquery name="getSign" datasource="DHRMS">
SELECT Sign
FROM signM
</cfquery>
<cfset Verifyby = getSign.sign />
<cfif Verifyby eq ''>
<form action="save_HOD-staff" method="post">
<input type="checkbox" id="myCheck" value="#getSign.Sign#" onclick="submit()">
</form>
<cfelse>
<p>#Verifyby#</p>
</cfif>
</cfoutput>
</td>