0

私はprimefacesを初めて使用し、p:draggableコンポーネントでこの問題に遭遇しました。これは、p:draggable コンポーネントを使用した私の Web サイトで、primefaces ショーケースとまったく同じです。

            <p:fieldset legend="PreparedData">

                <p:dataGrid id="currentData" columns="1" var="res" value="#{SomeBean.data}">
                    <p:column>
                        <p:panel id="draggedres" header="#{res.name}">
                            <h:panelGrid columns="1">
                                <h:outputText value="#{res.name}"/>
                            </h:panelGrid>

                        </p:panel>
                        <p:draggable for="draggedres" />

                    </p:column>
                </p:dataGrid>
             </p:fieldset>
             <p:commandButton value="Add" actionListener="#{SomeBean.addItem}" update="currentData" />

私の豆 SomeBean があります。

public class SomeBean{

    private List<SomeObjects> data = new ArrayList<SomeObjects>();

    public void addItem(){
        data.add(new SomeObjects("someName"));
    }

    //GETTERS SETTERS                 
}

今問題は、そのリストに新しいデータを追加すると表示されますが、ドラッグできないことです。これらのデータをドラッグ可能にする唯一の方法は、それらをその Bean のコンストラクターに設定することです。私がどこで間違いを犯したか知っている人はいますか?私はすでに Primefaces のマニュアルを読みましたが、それについては何もありません。そこでは、データはコンストラクターからのみ設定されると黙って想定しています。回答ありがとうございます。

4

1 に答える 1

0

送信したサンプルコードは正常に機能しています。使用しているコードを確認してください。コードデータ(変数名、機密情報を含む可能性のあるパッケージ名など)を難読化するために、目前のバグに関連するものを省略または変更します。

これは私があなたの例をテストするために使用したコード(ipsis literis)です:

SomeBean.java

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;


@ManagedBean
@ViewScoped
public class SomeBean {
private List<SomeObjects> data = new ArrayList<SomeObjects>();


public void addItem(){
data.add(new SomeObjects("someName"));
}


public List<SomeObjects> getData() {
    return data;
}


public void setData(List<SomeObjects> data) {
    this.data = data;
}

}

SomeObject.java

public class SomeObjects {

private String name;

public SomeObjects(String string) {
    this.setName(string);
}

public void setName(String name) {
    this.name = name;
}

public String getName() {
    return name;
}

}

draggable.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<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"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:head>
</h:head>
<h:body>
    <p:separator styleClass="espacador" />
    <p:fieldset legend="PreparedData">
        <p:dataGrid id="currentData" columns="1" var="res" value="#{someBean.data}">
            <p:column>
                <p:panel id="draggedres" header="#{res.name}">
                    <h:panelGrid columns="1">
                        <h:outputText value="#{res.name}" />
                    </h:panelGrid>
                </p:panel>
                <p:draggable for="draggedres" />
            </p:column>
        </p:dataGrid>
    </p:fieldset>
    <p:commandButton value="Add" actionListener="#{someBean.addItem}" update="currentData" />
<h:body>
</html>
于 2012-11-27T10:51:30.890 に答える