use*_*784 14 jsf converter jsf-2
我正在尝试实现一个自定义截断转换器,它会截断给定索引处的字符串并添加一个连续符号.只有当我对参数进行硬编码时,转换器才能正常工作,因为它们没有传递给后端.我究竟做错了什么?
参数是转换器类的属性:
@FacesConverter(value = TruncateConverter.CONVERTER_ID)
public class TruncateConverter implements Converter, StateHolder
{
public static final String CONVERTER_ID = "bla.blablabla.Truncate";
private int truncateIndex;
private String contSymbol;
Run Code Online (Sandbox Code Playgroud)
这是我如何使用转换器(或尝试):
<h:outputText id="news-text-left" value="#{newsListBean.newsList_teaser.text}">
<f:converter converterId="bla.blablabla.Truncate" truncateIndex="150" contSymbol="..." />
</h:outputText>
Run Code Online (Sandbox Code Playgroud)
我google了很多,并没有找到一个带参数的JSF2转换器的例子......谢谢你们的帮助,真的很感激!
Mak*_*aks 24
您可以查看JSF2.0源代码.例如DateTimeConverter ... JSF源代码可以在svn reposotory中找到:https://svn.java.net/svn/mojarra~svn/trunk
IMO创建这样的转换器并不容易.它还需要创建转换器标签以注册转换器.
将一些数据传递给转换器的其他方法是attibutes.所以你可以写
<h:outputText ...>
<f:converter converterId="bla.blablabla.Truncate" />
<f:attribute name="truncateIndex" value="150"/>
</h:outputText>
Run Code Online (Sandbox Code Playgroud)
比调用component.getAttributes().get("truncateIndex");
转换器代码.
基于@Maks解决方案:可以将转换器和属性组合在一个标签中:
<facelet-taglib version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facelettaglibrary_2_2.xsd">
<namespace>http://mycompany.com/some-identifier</namespace>
<tag>
<tag-name>truncate</tag-name>
<converter>
<converter-id>bla.blablabla.Truncate</converter-id>
</converter>
<attribute>
<name>truncateIndex</name>
</attribute>
</tag>
</facelet-taglib>
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样使用转换器:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:my="http://mycompany.com/some-identifier">
<my:truncate truncateIndex="150" />
</ui:composition>
Run Code Online (Sandbox Code Playgroud)
您也不需要从组件属性中获取参数。具有相同名称的 bean-property 将自动填充:
@FacesConverter("bla.blablabla.Truncate")
public class Truncate implements Converter {
private String truncateIndex;
// getters + setters
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19390 次 |
| 最近记录: |