3

有没有办法将 JSF h:outPutTextValue 字符串化?我的字符串是 AB-A03,我只想显示最后 3 个字符。openfaces 有任何可用的功能吗?

谢谢

4

3 回答 3

6

您可以使用 aConverter来完成这项工作。JSF 有几个内置转换器,但没有一个适合这种非常具体的功能要求,因此您需要创建一个自定义的转换器。

比较简单,Converter按照它的约定实现接口即可:

public class MyConverter implements Converter {

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object modelValue) throws ConverterException {
        // Write code here which converts the model value to display value.
    }

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String submittedValue) throws ConverterException {
        // Write code here which converts the submitted value to model value.
        // This method won't be used in h:outputText, but in UIInput components only.
    }

}

如果您使用的是 JSF 2.0(您的问题历史证实了这一点),您可以使用@FacesConverter注释来注册转换器。您可以使用(默认)value属性为其分配转换器 ID:

@FacesConverter("somethingConverter")

(其中“某物”应代表您尝试转换的模型值的特定名称,例如“邮政编码”或其他名称)

以便您可以按如下方式引用它:

<h:outputText value="#{bean.something}" converter="somethingConverter" />

对于您的特定功能要求,转换器实现可能如下所示(假设您实际上想要拆分-并仅返回最后一部分,这比“显示最后 3 个字符”更有意义):

@FacesConverter("somethingConverter")
public class SomethingConverter implements Converter {

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object modelValue) throws ConverterException {
        if (!(modelValue instanceof String)) {
            return modelValue; // Or throw ConverterException, your choice.
        }

        String[] parts = ((String) modelValue).split("\\-");
        return parts[parts.length - 1];
    }

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String submittedValue) throws ConverterException {
        throw new UnsupportedOperationException("Not implemented");
    }

}
于 2012-08-28T11:50:36.120 回答
4

您可以尝试使用JSTLfn:substring中的函数:

${fn:substring('A-B-A03', 4, 7)}
于 2012-08-28T11:50:15.030 回答
2

如果你的字符串来自一个 bean,你可以添加一个额外的 getter 来返回修剪后的版本:

private String myString = "A-B-A03";

public String getMyStringTrimmed()
{
  // You could also use java.lang.String.substring with some ifs here
  return org.apache.commons.lang.StringUtils.substring(myString, -3);
}

现在您可以在 JSF 页面中使用 getter:

<h:outputText value="#{myBean.myStringTrimmed}"/>
于 2012-08-29T19:30:21.853 回答