Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf Seam:如何使用转换器从页面参数派生值?_Jsf_Seam_Converter - Fatal编程技术网

Jsf Seam:如何使用转换器从页面参数派生值?

Jsf Seam:如何使用转换器从页面参数派生值?,jsf,seam,converter,Jsf,Seam,Converter,我只想将导航的URL参数(例如2010)转换为类似“Season 2010/11”的字符串。我想到了一个转换器,使用方式如下: <ui:define name="navigation"> <li> <s:link view="/season-list.xhtml" value="#{seasonHome.id}" styleClass="selected" rendered="#{not empty seasonHome.id}" converter="

我只想将导航的URL参数(例如2010)转换为类似“Season 2010/11”的字符串。我想到了一个转换器,使用方式如下:

<ui:define name="navigation">
  <li>
    <s:link view="/season-list.xhtml" value="#{seasonHome.id}" styleClass="selected" rendered="#{not empty seasonHome.id}" converter="#{startYearLabelConverter}" />
  </li>
  ...
</ui:define>
显然s:link没有“converter”属性。如何将其作为“最佳实践”而不必重复EL代码,如
s:link。。。value=“Season#{seasonHome.id}/#{(seasonHome.id+1).toString().substring(2)}”

转换器用于“绑定”属性-您可以读写它们。您给出的示例不需要转换器

您所要做的就是在您的家庭bean中编写一个方法:

public String getSeasonDescription() {
    return "Season " + id + "/" + new Integer(id + 1).toString().substring(2);
}
然后在XHTML中使用它:

<ui:define name="navigation">
    <li><s:link view="/season-list.xhtml" value="#{seasonHome.seasonDescription}" styleClass="selected" rendered="#{not empty seasonHome.id}" converter="#{startYearLabelConverter}" />
    </li>
    ...
</ui:define>

  • ...
    我们还构建了一些定制转换器。我们发现,如果您像这样向转换器添加另一个简单的
    format()
    方法,可以很好地调用它们

    @Name("myConverter")
    @Converter(forClass = XXX.class)
    @BypassInterceptors
    public class MyConverter implements javax.faces.convert.Converter {
    
     /* standard asObject/asString methods skipped */
    
     public String format(XXX value) {
        return this.getAsString(null, null, value);
     }
    
    然后我们通过它的bean名称来调用这个转换器,以格式化一个值:

    <f:param
       value="#{myConverter.format(value)}" />
    
    
    
    我不知道您是否需要转换器中的FacesContext,但在需要时获取实例应该不会有问题

    致以最良好的祝愿,
    亚历山大。

    它是绑定的。仅仅为了输出而使用转换器是非常好的。
    <f:param
       value="#{myConverter.format(value)}" />