APEX中apex_page.get_url传递含冒号复选框值异常求助
解决APEX中
apex_page.get_url传递复选框值的问题 问题根源
你遇到的问题是因为复选框的冒号分隔值在手动拼接p_values时,结合JavaScript字符串拼接的转义错误,导致URL参数被截断或语法错误。手动给P8_D加引号转义的方式会破坏apex_page.get_url生成的URL结构,进而引发浏览器语法错误,同时无法正确传递后续参数。
正确解决方案
不要手动拼接p_values的字符串,也不要在值里加额外转义,而是利用APEX内置函数正确处理参数编码,同时规范JavaScript字符串的生成:
方案1:使用apex_util.url_encode处理URL编码
直接传递参数值,让apex_page.get_url自动处理分隔,再用apex_util.url_encode确保URL在JavaScript中可正确解析:
'javascript:window.open('''||apex_util.url_encode(apex_page.get_url( p_page => '9', p_items => 'P9_A,P9_B,P9_C,P9_D,P9_E', p_values => Z.COLUMN_VAL||','||:P8_B||','||:P8_C||','||:P8_D||','||:P8_E, p_clear_cache => '9' ))||''', ''_blank'')' as LINKDETAIL
方案2:数组式参数传递(推荐)
避免手动拼接逗号,改用数组形式传递p_items和p_values,APEX会自动处理每个参数的分隔与编码:
'javascript:window.open('''||apex_page.get_url( p_page => '9', p_items => apex_tvarchar2('P9_A','P9_B','P9_C','P9_D','P9_E'), p_values => apex_tvarchar2(Z.COLUMN_VAL, :P8_B, :P8_C, :P8_D, :P8_E), p_clear_cache => '9' )||''', ''_blank'')' as LINKDETAIL
方案3:用apex_util.prepare_url做JavaScript转义
通过apex_util.prepare_url的JAVASCRIPT类型参数,自动完成符合JS语法的转义处理:
'javascript:window.open('||apex_util.prepare_url( apex_page.get_url( p_page => '9', p_items => 'P9_A,P9_B,P9_C,P9_D,P9_E', p_values => apex_tvarchar2(Z.COLUMN_VAL, :P8_B, :P8_C, :P8_D, :P8_E), p_clear_cache => '9' ), p_url_type => 'JAVASCRIPT' )||', ''_blank'')' as LINKDETAIL
为什么之前的转义方式无效
你手动添加的"\""会导致生成的JavaScript字符串出现混乱的引号组合(比如""\""),浏览器无法正确解析,同时破坏了apex_page.get_url生成的URL结构,直接导致参数传递失败。
内容的提问来源于stack exchange,提问作者JAWAD KHAN
相关产品推荐
相关产品推荐

