代码之家  ›  专栏  ›  技术社区  ›  Ian Carpenter

当会话状态保护打开时,如何在Oracle Apex中的树上创建手动链接?

  •  0
  • Ian Carpenter  · 技术社区  · 15 年前

    朋友,

    我在Apex面临另一个挑战,我希望你能帮忙。

    我使用John&Scott的绝妙著作“Pro Application Express”中描述的方法创建了一个树,其中页面链接存储在表中。下面是一个例子:

    go to a page passing some parameters
    
    f?p=&APP_ID.:3:&SESSION.::::P3_IDENTIFIER,P3_FAMILY_NAME:&P2_IDENTIFIER.,&P2_FAMILY_NAME.
    

    当页面运行时,它按预期工作。如果需要,我可以展开树并导航到页面传递参数。

    但是,当我打开会话状态保护时,这些“手工制作”的链接停止工作。因为链接不包含校验和,所以我需要它。

    经过一些调查,我发现我必须使用apex-util.prepare-url生成带有校验和的url。不幸的是,这就是我遇到问题的地方。我似乎无法将参数值传递到调用页。

    原始树查询是:

    select "IDENTIFIER" id,
    "PARENT_IDENTIFIER" pid,
    "TITLE" name,
    "LINK" link,
    null a1,
    null a2
    from <some table>
    

    然后我将其更改为使用apex-util.prepare-url:

    ....
    APEX_UTIL.PREPARE_URL('f?p='||:APP_ID||':3:'||:APP_SESSION||'::::P3_IDENTIFIER,P3_FAMILY_NAME:&P2_IDENTIFIER.,&P2_FAMILY_NAME.') link,
    ...
    

    这样就可以调用页面,我可以看到传递的参数值。但是我不能使用这个方法,因为它只限于一页!

    最后,我尝试将页码、参数和参数值存储在树所基于的表的不同列中,然后将它们放在一起:

    ...
    APEX_UTIL.PREPARE_URL('f?p='||:APP_ID||':'||navigate_to_page||':'||:APP_SESSION||'::::'||parameters||':'||parameter_values) link,
    ...
    
    Where: 
    
    navigate to page has the value of: 3
    parameters has the value of: P3_IDENTIFIER,P3_FAMILY_NAME
    parameter_values has the values of: &P2_IDENTIFIER.,&P2_FAMILY_NAME.
    

    现在调用页面,但参数值变为文本。因此,在我期望标识符的地方,我会看到&p2_标识符,而姓氏也是如此。

    我做错什么了?如何使用apex-util-prepare-url将值传递给被调用的页面?

    如果需要,我的环境详细信息是:apex 3.2.1,Oracle Application Server 10.1.2.3。Oracle数据库10.2.0.3

    提前感谢您提供的任何帮助。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Jeffrey Kemp    15 年前

    我认为您需要使用v()函数来解析这些变量:

    APEX_UTIL.PREPARE_URL('f?p='||:APP_ID
    ||':'||navigate_to_page
    ||':'||:APP_SESSION
    ||'::::'||parameters
    ||':'||v('P2_IDENTIFIER')||','||v('P2_FAMILY_NAME')) link,
    

    在旁注中,你可能需要小心 P2_FAMILY_NAME 因为它正在URL中使用;听起来像一个包含用户输入数据的纯文本字段?

    推荐文章