Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 如何更改标准href="#&引用;h:commandLink的属性?_Jsf 2_Mojarra - Fatal编程技术网

Jsf 2 如何更改标准href="#&引用;h:commandLink的属性?

Jsf 2 如何更改标准href="#&引用;h:commandLink的属性?,jsf-2,mojarra,Jsf 2,Mojarra,我正在维护一个JSF2 Ajax应用程序,我们在所有操作中大量使用h:commandLinks和f:Ajax标记-总是只重新播放需要的内容 这当然会破坏用户在右键单击链接并选择“在新选项卡中打开链接”等操作时的预期行为 我知道f:ajax强制生成的a元素的href属性为#,并在onclick函数中执行所有神奇的post请求技巧-我现在希望通过在生成的标记的href属性中添加一些有意义的链接,为“openlink…”操作提供回退支持 这不会破坏“正常”onclick行为,因为生成的javascri

我正在维护一个JSF2 Ajax应用程序,我们在所有操作中大量使用
h:commandLinks
f:Ajax
标记-总是只重新播放需要的内容

这当然会破坏用户在右键单击链接并选择“在新选项卡中打开链接”等操作时的预期行为

我知道f:ajax强制生成的
a
元素的href属性为
#
,并在onclick函数中执行所有神奇的post请求技巧-我现在希望通过在生成的
标记的href属性中添加一些有意义的链接,为“openlink…”操作提供回退支持

这不会破坏“正常”onclick行为,因为生成的javascript总是以
返回false结束
但允许我使用普通GET请求将用户发送到某个页面,以防他们想在新窗口中打开链接


是否有一种内置的方法来实现这一点?或者有人能给我指出在JSF生命周期中我必须跳到哪里才能做到这一点的正确方向吗?也许使用一个阶段侦听器?

最简单的方法是相应地扩展和重写该方法。Mojarra是开源的,只需复制该方法并编辑其中的行即可。根据您的见解替换
“#”
字符串

public class MyCommandLinkRenderer extends CommandLinkRenderer {

    @Override
    protected void renderAsActive(FacesContext context, UIComponent command) throws IOException {
        // ...
    }

}
要让它运行,请按如下方式在
faces config.xml
中注册它:

<render-kit>
    <renderer>
        <component-family>javax.faces.Command</component-family>
        <renderer-type>javax.faces.Link</renderer-type>
        <renderer-class>com.example.MyCommandLinkRenderer</renderer-class>
    </renderer>
</render-kit>

javax.faces.Command
javax.faces.Link
com.example.myCommand渲染器
请注意,这将使渲染器与Mojarra紧密耦合。要独立于JSF实现,您需要创建一个全新的渲染器,而不是扩展特定于Mojarra的渲染器类



<强>无关> <强>对具体问题,考虑阅读

谢谢BalusC,扩展命令行渲染器完美地工作以达到预期的效果。