gpt4 book ai didi

JSF/Facelets : set `action` attribute to a dynamically evaluated string

转载 作者:行者123 更新时间:2023-12-03 03:29:47 25 4
gpt4 key购买 nike

在我的 JSF/Facelets 应用程序中,我想使用自定义标记从页面 ID 列表动态生成面包屑路径:

<foo:breadcrumbs trail="foo,bar,baz"/>

这应该生成如下内容:

<h:commandLink action="foo" ... />
<h:commandLink action="bar" ... />
<!-- (etc.) -->

我的代码看起来像这样:

<ui:repeat value="#{fn:split(trail, ',')}" var="key">
<h:commandLink action="#{key}" ... />
</ui:repeat>

此代码的问题在于 #{key} 被解释为方法绑定(bind)。但是,我只想返回 #{key} 的字符串值作为导航结果。我怎样才能实现这一目标?

<小时/>

我唯一能想到的就是创建一个虚拟托管 bean,它有一个 outcome 字段和一个操作处理程序,并像这样调用它:

<h:commandLink action="#{dummy.click}" ...>
<f:setPropertyActionListener target="#{dummy.outcome}" value="#{key}" />
</h:commandLink>

虚拟类的定义如下:

public class Dummy {

private String outcome;

public String click() {
return outcome;
}

public void setOutcome(String outcome) {
this.outcome = outcome;
}

public void getOutcome() {
return outcome;
}
}

虽然这看起来很难看,但我不知道它是否有效。

最佳答案

自从提出这个问题以来,我发现了一个显而易见的解决方案,而且实现起来非常简单。

作为 JSF 操作目标的方法必须不接受任何参数并返回一个字符串。事实证明,String 类已经有一个与此签名匹配的方法 - toString()!

因此,我将 UI 循环更改为以下内容:

<ui:repeat value="#{fn:split(trail, ',')}" var="key">
<h:commandLink action="#{key.toString}" ... />
</ui:repeat>

这允许动态评估的key成为JSF操作结果,并且不需要任何额外的类或丑陋的黑客行为。

关于JSF/Facelets : set `action` attribute to a dynamically evaluated string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1237439/

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