gpt4 book ai didi

jsf - 如何呈现 ? 的自定义属性

转载 作者:行者123 更新时间:2023-12-02 17:49:06 25 4
gpt4 key购买 nike

我正在尝试使用如下代码片段实现 pinterest 的 pinit 按钮:

<h:outputLink value="http://pinterest.com/pin/create/button/" class="pin-it-button" count-layout="horizontal">
<f:param name="url" value="#{beanOne.someMethod}/sometext{prettyContext.requestURL.toURL()}"/>
<f:param name="media" value="#{beanOne.someOtherMethod}/sometext/somemoretext/#{beanTwo.someMethodTwo}-some-text.jpg"/>
<f:param name="description" value="#{beanTwo.someOtherMethodTwo}"/>
<img border="0" src="//assets.pinterest.com/images/PinExt.png" title="Pin It" />
</h:outputLink>

这里是陷阱:

  • 整个标记是由来自两个不同 bean 的四种不同方法以及一些静态文本的组合创建的
  • url 参数显然需要进行 urlencoded,因此我在 h:outputLink 中使用 f:param 以便对它们进行 urlencoded
  • 生成的a标签需要有非标准的count-layout="horizo​​ntal"属性

现在我的问题是:

  • 如何将 count-layout 属性注入(inject) h:outputLink 或生成的 anchor 标记
  • 否则,如果我做不到,还有另一种非侵入性(我不想更改 bean 方法)方法来完成所需的 pinit 按钮标记吗?

所需的标记可以在 http://pinterest.com/about/goodies/ 找到在“网站固定按钮”部分。

最佳答案

要么使用正常的 <a>元素以及 custom EL function哪些代表 URLEncoder#encode() .

<c:set var="url" value="#{beanOne.someMethod}/sometext#{prettyContext.requestURL.toURL()}"/>
<c:set var="media" value="#{beanOne.someOtherMethod}/sometext/somemoretext/#{beanTwo.someMethodTwo}-some-text.jpg"/>
<c:set var="description" value="#{beanTwo.someOtherMethodTwo}"/>

<a href="http://pinterest.com/pin/create/button/?url=#{utils:encodeURL(url)}&amp;media=#{utils:encodeURL(media)}&amp;description=#{utils:encodeURL(description)}" class="pin-it-button" count-layout="horizontal">
<img border="0" src="//assets.pinterest.com/images/PinExt.png" title="Pin It" />
</a>

(请注意 class 属性对于 <h:outputLink> 无效,您应该使用 styleClass )

或者为 <h:outputLink> 创建自定义渲染器这增加了对 count-layout 的支持属性。假设您使用的是 Mojarra,最简单的方法是扩展其 OutputLinkRenderer :

public class ExtendedLinkRenderer extends OutputLinkRenderer {

@Override
protected void writeCommonLinkAttributes(ResponseWriter writer, UIComponent component) throws IOException {
super.writeCommonLinkAttributes(writer, component);
writer.writeAttribute("count-layout", component.getAttributes().get("count-layout"), null);
}

}

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

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

关于jsf - 如何呈现 <h :outputLink>? 的自定义属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10701074/

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