В моем приложении JSF / Facelets я хочу динамически генерировать цепочку из списка идентификаторов страниц, используя пользовательский тег:
<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}
интерпретируется как привязка метода. Однако я просто хочу, чтобы строковое значение #{key}
было возвращено в качестве результата навигации. Как мне этого добиться?
Единственное, о чем я мог подумать, это создать фиктивный управляемый бин с полем 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;
}
}
Хотя это кажется уродливым, и я не знаю, сработает ли это.