删除行数据表?

时间:2014-09-06 20:40:29

标签: jsf primefaces

我有一个包含@ElementCollection注释属性的实体。这个属性是我添加telphone(telefones)的String列表。我在一个数据表面显示这个电话。

如何在选中行的情况下删除此电话?

我正在尝试这个。

实体

@Entity
public class UnidadeEscolar implements Serializable{    
    private static final long serialVersionUID = 1L;    

    @Id @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;

    @NotNull @Size(min=5, message="Informe o nome da unidade escolar")
    @Column(unique=true)
    private String nome;

    private String departamento;

    @Embedded
    private Endereco endereco;

    @ElementCollection
    @JoinTable(name="telefones_ue", joinColumns=@JoinColumn(name="ue_id"))
    private List<String> telefones = new ArrayList<String>();


/** adiciona telefones */
    public void addTelefone(String tel){
        telefones.add(tel);
    }

    /** remove telefone */
    public void removeTelefone(int row){
        telefones.remove(row);
    }

托管Bean

@ManagedBean
@ViewScoped
public class UnidadeEscolarMB implements Serializable{  
    private static final long serialVersionUID = 1L;

    private UnidadeEscolar bean;
    private GenericDAO<UnidadeEscolar> dao;
    private List<UnidadeEscolar> unidades = null;   
    private String telefone = "";


    /** add telphone to entity */
    public void addTelefones(){
        //System.out.println(telefone);
        bean.addTelefone(telefone);
        telefone = "";
    }

    /** remove telphone of entity */
    public void removeTelefone(){
        bean.getTelefones().remove(telefone);
    }


    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

XHTML

<p:tab title="Contato">        
                <p:fieldset legend="Telefones">
                    <p:dataTable id="tabelaTelefones" widgetVar="datalistTelefones"
                                 value="#{unidadeEscolarMB.bean.telefones}" var="fone"
                                 emptyMessage="Nenhum registro encontrado"
                                 selectionMode="single"
                                 selection="#{unidadeEscolarMB.telefone}"
                                 rowKey="#{unidadeEscolarMB.bean.id}"                                                                                                                                                                                                
                            >
                            <p:column headerText="Telefone">
                                <h:outputText value="#{fone}"/>                         
                            </p:column>                 
                    </p:dataTable>


                    <p:commandButton actionListener="#{unidadeEscolarMB.removeTelefone()}" value="-" update="tabelaTelefones"/>

        </p:tab>

如何删除在dataTable中选择的telphone?

1 个答案:

答案 0 :(得分:0)

我使用<f:setPropertyActionListener/>

解决了这个问题

这里我是怎么做的

<p:tab title="Contato">        
                <p:fieldset legend="Telefones">
                    <p:dataTable id="tabelaTelefones" widgetVar="datalistTelefones"
                                 value="#{unidadeEscolarMB.bean.telefones}" var="fone"
                                 emptyMessage="Nenhum registro encontrado"                                                                                                                                                                                                                                                          
                            >
                            <p:column headerText="Telefone">
                                <h:outputText value="#{fone}"/>                            
                            </p:column>            

                            <p:column headerText="">
                                <p:commandLink action="#{unidadeEscolarMB.removeTelefone()}" value="Excluir" update="tabelaTelefones">
                                    <f:setPropertyActionListener target="#{unidadeEscolarMB.telefone}" value="#{fone}"/>
                                </p:commandLink>
                            </p:column>                    

                    </p:dataTable>

                    <p:inputMask id="telefone" widgetVar="telefoneMask" value="#{unidadeEscolarMB.telefone}" mask="(99)9-9999-9999" />
                    <p:commandButton actionListener="#{unidadeEscolarMB.addTelefones()}" value="+" update="telefone, tabelaTelefones"/>                

                    <p:selectBooleanCheckbox itemLabel="Adiciona9" onchange="setMaskTelefone()" id="checkBox" widgetVar="ckbox9" value="true" immediate="true"/>
                </p:fieldset>       
        </p:tab>



@ManagedBean
@ViewScoped
public class UnidadeEscolarMB implements Serializable{    
    private static final long serialVersionUID = 1L;

    private UnidadeEscolar bean;
    private GenericDAO<UnidadeEscolar> dao;
    private List<UnidadeEscolar> unidades = null;
    private String telefone = "";


    /** adiciona telefone ao bean */
    public void addTelefones(){
        //System.out.println(telefone);
        bean.addTelefone(telefone);
        telefone = "";
    }

    /** remove telefone do bean */
    public void removeTelefone(){        
        bean.getTelefones().remove(telefone);    
        telefone = "";
    }


    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;        
    }