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 内部自定义组件<;用户界面:重复>;不';在编码过程中找不到迭代项_Jsf_Custom Component_Uirepeat - Fatal编程技术网

Jsf 内部自定义组件<;用户界面:重复>;不';在编码过程中找不到迭代项

Jsf 内部自定义组件<;用户界面:重复>;不';在编码过程中找不到迭代项,jsf,custom-component,uirepeat,Jsf,Custom Component,Uirepeat,我正在尝试创建一个自定义组件,用于显示具有特定形式的实体。所以我已经创建了@FacesComponent,他正在工作,但只有当他不在像这样的循环中时。当我使用下面的代码时,我的组件显示price和photo的空值,而不是name。你有什么解释吗 XHTML代码: <ui:define name="content"> <f:view> <h:form> <ui:repeat value="#{dataMana

我正在尝试创建一个自定义组件,用于显示具有特定形式的实体。所以我已经创建了@FacesComponent,他正在工作,但只有当他不在像
这样的循环中时。当我使用下面的代码时,我的组件显示price和photo的空值,而不是name。你有什么解释吗

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>");
    }
}
封装组件;
导入java.io.IOException;
导入javax.faces.context.FacesContext;
导入javax.faces.component.FacesComponent;
导入javax.faces.component.UIComponentBase;
导入javax.faces.context.ResponseWriter;
@FacesComponent(value=“CocktailVignette”)
公共类CocktailVignette扩展UIComponentBase{
私有字符串idPrefix;
私有字符串名称;
私人字符串价格;
私人照片;
公共字符串getIdPrefix(){
返回idPrefix;
}
公共void setIdPrefix(字符串idPrefix){
this.idPrefix=idPrefix;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getPrice(){
退货价格;
}
公共无效设置价格(字符串价格){
这个价格=价格;
}
公共字符串getUrlPhoto(){
返回照片;
}
公共void setUrlPhoto(字符串urlPhoto){
this.urlPhoto=urlPhoto;
}
@凌驾
公共字符串getFamily(){
返回“CocktailVignette”;
}
@凌驾
public void encodeBegin(FacesContext上下文)引发IOException{
ResponseWriter=context.getResponseWriter();
作者:写(“”);
writer.write(“+name+”);
writer.write(“+price+”);
作者:写(“”);
}
}

非常感谢:)我正在努力,但没有任何效果

所有对状态变化敏感的组件属性(例如,依赖于
的值,至少是那些在视图构建期间未知但仅在视图渲染期间未知的属性),必须将属性值的存储委托给状态帮助器,如继承方法可用

启动示例:

public String getPrice() {
    return (String) getStateHelper().eval("price");
}

public void setPrice(String price) {
    getStateHelper().put("price", price);
}
对所有其他属性应用相同的方法,并去掉实例变量声明。重要注意事项是状态帮助键(
“price”
(在上面的示例中)必须与属性名完全相同

另见:

是的,就是这样!非常感谢:)我想知道。。。是否可以将列表从我的XHTML页面传递到我的自定义组件?因为我正在尝试,我得到了一个NullPointerException。。。