Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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 2 Primefaces widgetVar干扰ui:repeat或ui:datatable_Jsf 2_Primefaces - Fatal编程技术网

Jsf 2 Primefaces widgetVar干扰ui:repeat或ui:datatable

Jsf 2 Primefaces widgetVar干扰ui:repeat或ui:datatable,jsf-2,primefaces,Jsf 2,Primefaces,我有一个,它在列表上迭代,并使用中当前字符串的值创建一个 但是,当我将widgetVar添加到我的属性时,的值始终是上一次迭代的字符串 有人能解释一下发生了什么,并(正如我需要的那样)指出一个解决方案吗 这是我的html: <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xm

我有一个
,它在
列表上迭代,并使用
中当前字符串的值创建一个

但是,当我将
widgetVar
添加到我的
属性时,
的值始终是上一次迭代的字符串

有人能解释一下发生了什么,并(正如我需要的那样)指出一个解决方案吗

这是我的html:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">
<h:head />
<h:body>
    <ui:repeat var="thing" value="#{bugBean.things}">
        <p:lightBox widgetVar="whatever">
            <h:outputLink>
                <h:outputText value="#{thing}" />
            </h:outputLink>
            <f:facet name="inline">
                <h:form>
                        <p:commandButton action="#{bugBean.writeThing(thing)}"
                            value="#{thing}" />
                </h:form>
            </f:facet>
        </p:lightBox>
    </ui:repeat>
</h:body>
</html>

这是支持bean:

package huhu.main.managebean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.enterprise.context.SessionScoped;
import javax.inject.Named;

@Named
@SessionScoped
public class BugBean implements Serializable {

   private static final long serialVersionUID = 1L;
   List<String> things = new ArrayList<String>();

   public BugBean(){
      things.add("First");
      things.add("Second");
      things.add("Third");
   }

   public void writeThing(String thing){
      System.out.println(thing);
   }

   public List<String> getThings() {
      return things;
   }

   public void setThings(List<String> things) {
      this.things = things;
   }

}
包huhu.main.managebean;
导入java.io.Serializable;
导入java.util.ArrayList;
导入java.util.List;
导入javax.enterprise.context.SessionScoped;
导入javax.inject.Named;
@命名
@会议范围
公共类BugBean实现了可序列化{
私有静态最终长serialVersionUID=1L;
List things=new ArrayList();
公共BugBean(){
添加(“第一”);
添加(“第二”);
添加(“第三”);
}
公共无效写入(字符串内容){
System.out.println(事物);
}
公共列表getThings(){
归还物品;
}
公共物品(列出物品){
这个东西=东西;
}
}

widgetVar
基本上生成一个窗口范围的JavaScript变量。您现在在JavaScript上下文中有效地做的是:

window['whatever'] = new Widget(lightboxElement1);
window['whatever'] = new Widget(lightboxElement2);
window['whatever'] = new Widget(lightboxElement3);
// ...
这样,JS中的
变量将只引用最后一个变量

基本上,您应该为它们各自指定一个唯一的名称,例如,通过添加迭代索引:

<ui:repeat var="thing" value="#{bugBean.things}" varStatus="iteration">
    <p:lightBox widgetVar="whatever#{iteration.index}">
通过这种方式,您可以通过
whatever0
whatever1
whatever2
等方式引用各个灯箱



与具体问题无关:
widgetVar
基本上会生成一个窗口范围的JavaScript变量,使用单个lightbox并在每次单击时更新其内容不是更容易吗。您现在在JavaScript上下文中有效地做的是:

window['whatever'] = new Widget(lightboxElement1);
window['whatever'] = new Widget(lightboxElement2);
window['whatever'] = new Widget(lightboxElement3);
// ...
这样,JS中的
变量将只引用最后一个变量

基本上,您应该为它们各自指定一个唯一的名称,例如,通过添加迭代索引:

<ui:repeat var="thing" value="#{bugBean.things}" varStatus="iteration">
    <p:lightBox widgetVar="whatever#{iteration.index}">
通过这种方式,您可以通过
whatever0
whatever1
whatever2
等方式引用各个灯箱



与具体问题无关:使用单个lightbox并在每次单击时更新其内容不是更容易吗?

最近我在升级到primefaces 4.0->5.1时遇到了类似的问题

我必须使用语法:

PF('whatever0')

由于primefaces命名widgetvar的方式发生了变化。

最近我在升级到primefaces 4.0->5.1时遇到了类似的问题

我必须使用语法:

PF('whatever0')

由于primefaces命名widgetvar的方式发生了变化。

太棒了!感谢您富有启发性的回答,并对我的设计提出质疑当然,只更新一个灯箱的内容要高效得多。我会那样做的。打开灯箱的链接已经在灯箱标签内,这让我很恼火——现在我意识到这不是一个障碍。还有一个问题:我在哪里可以(重新)阅读你刚才就我的问题向我指出的内容?不客气。我只是观察了生成的HTML代码(在这个特殊的例子中,我已经通过查看JSF代码了解到了这一点)!感谢您富有启发性的回答,并对我的设计提出质疑当然,只更新一个灯箱的内容要高效得多。我会那样做的。打开灯箱的链接已经在灯箱标签内,这让我很恼火——现在我意识到这不是一个障碍。还有一个问题:我在哪里可以(重新)阅读你刚才就我的问题向我指出的内容?不客气。我只是观察了生成的HTML代码(在本例中,我通过查看JSF代码就知道了这一点)。