gpt4 book ai didi

jsf-2 - 如何更改 h :commandLink? 的标准 href ="#"属性

转载 作者:行者123 更新时间:2023-12-04 21:20:38 24 4
gpt4 key购买 nike

我正在维护一个 JSF2 Ajax 应用程序,我们正在大量使用 h:commandLinksf:ajax所有 Action 的标签——总是只重新渲染需要的东西。

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

我知道 f:ajax 强制结果 a 的 href 属性元素为 #并在 onclick 函数中执行所有魔术发布请求技巧 - 我现在想通过在结果 <a> 的 href 属性中放置一些有意义的链接来为“打开链接...”操作提供后备支持。标签。

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

有没有办法做到这一点?或者有人可以指出我在 JSF 生命周期中的哪个地方我必须使用阶段监听器来执行此操作的正确方向?

最佳答案

最简单的方法是扩展 com.sun.faces.renderkit.html_basic.CommandLinkRenderer 并覆盖 renderAsActive() 相应的方法。 Mojarra 是开源的,只需复制方法并编辑它说的行 writer.write("href", "#", "href") .更换 "#"根据您的见解字符串。

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>

请注意,这将您的渲染器与 Mojarra 紧密结合。要独立于 JSF 实现,您需要创建一个全新的渲染器,而不是扩展 Mojarra 特定的渲染器类。

无关 具体问题可以考虑阅读 When should I use h:outputLink instead of h:commandLink?

关于jsf-2 - 如何更改 h :commandLink? 的标准 href ="#"属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12602923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com