3

<ui:repeat>繰り返して、現在の文字列の値を使用してList<String>を作成するがあります。 しかし、の属性に追加すると、の値は常に最後の反復からの文字列になります。 <p:commandButton><p:lightBox>
widgetVar<p:lightBox><p:commandButton>

誰かが何が起こるかを説明し、(私が必要とするように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;
   }

}
4

2 に答える 2

9

widgetVar基本的に、ウィンドウスコープのJavaScript変数を生成します。JavaScriptコンテキストで現在効果的に行っていることは、次のとおりです。

window['whatever'] = new Widget(lightboxElement1);
window['whatever'] = new Widget(lightboxElement2);
window['whatever'] = new Widget(lightboxElement3);
// ...

このようにwhatever、JSの変数は最後の変数のみを参照します。

基本的には、たとえば反復インデックスを追加するなどして、それぞれに一意の名前を付ける必要があります。

<ui:repeat var="thing" value="#{bugBean.things}" varStatus="iteration">
    <p:lightBox widgetVar="whatever#{iteration.index}">

このようにして効果的になります:

window['whatever0'] = new Widget(lightboxElement1);
window['whatever1'] = new Widget(lightboxElement2);
window['whatever2'] = new Widget(lightboxElement3);
// ...

whatever0このようにしてwhatever1、、、whatever2などで個々のライトボックスを参照できます。


具体的な問題とは関係ありません。代わりに、単一のライトボックスを使用して、クリックするたびにそのコンテンツを更新する方が簡単ではありませんか?

于 2012-11-02T17:29:02.917 に答える
0

最近、primefaces4.0->5.1にアップグレードするときに同様の問題が発生しました

構文を使用する必要がありました:

PF('whatever0')

Primefacesがwidgetvarに名前を付ける方法が変更されたため。

于 2014-11-14T09:13:13.150 に答える