我在点击页面中的URL时打开一个新的弹出窗口。 我在这里的问题是我可以将整个结构传递到新页面吗?
如果那不可能有任何简单的方法吗?
答案 0 :(得分:8)
是否在同一应用程序的URL部分中打开了该页面?
如果是这样,更好的方法是将结构保存在用户的会话中并以这种方式提取信息。更清晰的URL,代码和更安全。
干杯, 詹姆斯
答案 1 :(得分:1)
虽然建议使用 HIGHLY NOT ,但您可以这样做:
<cfset tmp = {} />
<cfset tmp.name="Marcos" />
<cfset tmp.lname="Placona" />
<cfwddx action="cfml2wddx" input="#tmp" output="tmpWDDX">
<a href="index.cfm?string=#tmpWDDX#">link</a>
如果您决定采用这种方法,我建议您通过表单而不是URL发送信息。
您始终可以选择将数据存储在持久对象(如bean)或更简单的方法(如会话)中。
希望这有助于你
答案 2 :(得分:1)
扩大James Buckingham的答案......
(假设您将会话管理设置为true
。)
在调用页面中,只需将结构复制到会话变量:
<cfset session.myTempStruct=variables.myTempStruct />
然后,在弹出窗口中,将结构复制回该请求的本地范围:
<cfset variables.myTempStruct=session.myTempStruct />
如果您不希望该结构在会话中闲逛,您可以让弹出窗口的请求在将其复制到本地范围后立即将其从会话中删除。
<cfset structDelete(session, "myTempStruct") />
答案 3 :(得分:0)
您可以将您的数据点作为参数添加到URI的末尾,但我不建议您使用您看到的方法,因为它很可能会被注入。
答案 4 :(得分:0)
序列化Struct(使用serializeJSON()或其他东西)和puttin git在URL中似乎是合理的,如果struct不是太大(读取:总共少于3-4k个字符)。
其他解决方案是将其放在一些共享范围内:会话,应用程序等。
第三,将使用POST请求调用cfm,它可以处理更大的结构然后GET。