<ui:repeat> 中的自定义组件在编码过程中找不到迭代项



我正在尝试创建一个自定义组件,用于显示具有特定表单的实体。因此,我创建了@FacesComponent,他正在工作,但只有当他不在像<ui:repeat>这样的循环中时。当我使用以下代码时,我的组件显示价格和照片的空值,但不显示名称。你有解释吗?

XHTML代码:

<ui:define name="content">
    <f:view>
        <h:form>
            <ui:repeat value="#{dataManagedBean.listNewestCocktails}" var="item" varStatus="status">
                <h:outputText value="#{item.price}"/> <!--working very well-->
                <t:cocktailVignette idPrefix="newCocktails" name="foo" price="#{item.price}" urlPhoto="#{item.photoURI}"/>   <!-- not working the getPrice here -->
            </ui:repeat>
            <!--<t:cocktailVignette idPrefix="allCocktails" name="OSEF" price="20" urlPhoto="osefdelurl" ></t:cocktailVignette> -->
        </h:form>               
    </f:view> 

我的组件代码:

    package component;
import java.io.IOException;
import javax.faces.context.FacesContext;
import javax.faces.component.FacesComponent;
import javax.faces.component.UIComponentBase;
import javax.faces.context.ResponseWriter;
@FacesComponent(value = "CocktailVignette")
public class CocktailVignette extends UIComponentBase {
    private String idPrefix;
    private String name;
    private String price;
    private String urlPhoto;
    public String getIdPrefix() {
        return idPrefix;
    }
    public void setIdPrefix(String idPrefix) {
        this.idPrefix = idPrefix;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPrice() {
        return price;
    }
    public void setPrice(String price) {
        this.price = price;
    }
    public String getUrlPhoto() {
        return urlPhoto;
    }
    public void setUrlPhoto(String urlPhoto) {
        this.urlPhoto = urlPhoto;
    }
    @Override
    public String getFamily() {
        return "CocktailVignette";
    }
    @Override
    public void encodeBegin(FacesContext context) throws IOException {
        ResponseWriter writer = context.getResponseWriter();
        writer.write("<div id=""+idPrefix+name+"" class="cocktail-vignette">");
        writer.write("<h2>"+name+"</h2>");
        writer.write("<h3>"+price+"</h3>");
        writer.write("</div>");
    }
}

非常感谢:)我正在努力,但什么都不起作用。。。

所有对状态变化敏感的组件属性(例如,依赖于<ui:repeat var>的值,至少是在视图构建时未知但仅在视图渲染时未知的值),都必须将属性值的存储委派给继承的getStateHelper()方法可用的状态助手。

启动示例:

public String getPrice() {
    return (String) getStateHelper().eval("price");
}
public void setPrice(String price) {
    getStateHelper().put("price", price);
}

对所有其他属性应用相同的方法,并去掉实例变量声明。重要的一点是,状态辅助键(上例中的"price")必须与属性名称完全相同。

另请参阅:

  • 扩展UIComponentBase时如何保存状态

相关内容

  • 没有找到相关文章

最新更新