2010-04-30 80 views
2

我打开一个新的弹出窗口,点击我的网页中的一个URL。 我的问题在这里是我可以传递整个结构到新的页面?我们可以通过URL传递整个结构吗?

如果这是不可能的有没有简单的方法来做到这一点?

回答

1

扩大詹姆斯白金汉宫的答案...

(这里假设你有会话管理设置为true

在调用页面,只需将您的结构复制到一个会话变量:

<cfset session.myTempStruct=variables.myTempStruct /> 

然后,在弹出窗口中,复制结构回本地范围为该请求:

<cfset variables.myTempStruct=session.myTempStruct /> 

如果您不希望该结构在会话中闲逛,您可以让弹出式窗口的请求在将其复制到本地范围之后立即将其从会话中删除。

<cfset structDelete(session, "myTempStruct") /> 
0

您可以将您的数据点作为参数添加到URI的末尾,但我不建议使用您所看到的方法,因为它很容易被注入。

+0

数据点!你的意思是结构中的所有值和键? – Somu 2010-04-30 11:45:49

+0

是的,因为参数通常是一个命名实体及其分配的值。 – 2010-04-30 17:08:43

1

虽然HIGHLY不建议,你可以这样做:

<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)中,或者使用更简单的方法(如会话)。

希望这可以帮到你

+0

感谢马科斯。 这可能会有所帮助,但正如你所说的那样非常推荐,我必须考虑以不同的方式来做到这一点。 – Somu 2010-04-30 11:48:55

8

页面是否在同一个应用程序的URL部分中打开?

如果是这样的话,更好的方法是在用户的会话中保存结构并以这种方式提取信息。更清晰的网址,代码和更安全。

干杯, 詹姆斯

+0

是的。新页面是相同的应用程序。 因为我对COldFusion完全陌生,不得不弄清楚它是如何完成的。 谢谢 – Somu 2010-04-30 11:44:39

+0

我就是这么做的。 – ale 2010-04-30 13:34:23

0

序列化结构(与serializeJSON()或东西),并puttin蠢货,网址似乎万一结构合理是不是太大(阅读:在总共不到3-4k字符)。

其他的解决办法是把这个在一些共享范围:会话,应用程序等

第三,将调用与CFM POST请求,其可以处理较大的结构则GET。

相关问题