Gaurav Sharma
Gaurav Sharma

Reputation: 4052

Primefaces and liferay: Single select not working

I'm following the example given at http://www.primefaces.org/showcase/ui/datatableRowSelectionSingle.jsf

I'm using this as a portlet in Liferay. Here is my code:

The HTML:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui">

    <h:form id="form">

        <h:panelGrid columns="1" cellpadding="10" width="100%">

            <p:dataTable id="campaignTable" var="data"
                value="#{campaign.allCampaigns}" selectionMode="single"
                rowKey="#{data.campaignId}" selection="#{campaign.selectedCampaign}">

                <f:facet name="header">  
                    <p:commandButton type="button" value="Create Campaign" icon="ui-icon-document" update=":form:createForm" onclick="createDialog.show()" />

                </f:facet>

                <p:column sortBy="#{data.campaignId}">
                    <f:facet name="header">ID</f:facet>
                    <h:outputText value="#{data.campaignId}" />
                </p:column>

                <p:column sortBy="#{data.carrier}">
                    <f:facet name="header">Carrier</f:facet>
                    <h:outputText value="#{data.carrier}" />
                </p:column>

                <p:column sortBy="#{data.shortCode}">
                    <f:facet name="header">Short Code</f:facet>
                    <h:outputText value="#{data.shortCode}" />
                </p:column>

                <p:column sortBy="#{data.sendType}">
                    <f:facet name="header">Send Type</f:facet>
                    <h:outputText value="#{data.sendType}" />
                </p:column>

                <p:column sortBy="#{data.startDate}">
                    <f:facet name="header">Start Date</f:facet>
                    <h:outputText value="#{data.startDate.time}">
                        <f:convertDateTime pattern="MM/dd/yyyy hh:mm a" />
                    </h:outputText>
                </p:column>

                <p:column sortBy="#{data.endDate}">
                    <f:facet name="header">End Date</f:facet>
                    <h:outputText value="#{data.endDate.time}">
                        <f:convertDateTime pattern="MM/dd/yyyy hh:mm a" />
                    </h:outputText>
                </p:column>

                <p:column sortBy="#{data.messageText}">
                    <f:facet name="header">Text Message</f:facet>
                    <h:outputText value="#{data.messageText}" />
                </p:column>

                <p:column sortBy="#{data.serviceId}">
                    <f:facet name="header">Service ID</f:facet>
                    <h:outputText value="#{data.serviceId}" />
                </p:column>

                <p:column sortBy="#{data.responseKeyword}">
                    <f:facet name="header">Response Keyword</f:facet>
                    <h:outputText value="#{data.responseKeyword}" />
                </p:column>

            </p:dataTable>
        </h:panelGrid>


        <p:dialog id="createDialog" header="Create Campaign" widgetVar="createDialog">

            <h:panelGrid id="createForm" columns="2" cellpadding="5">
                <h:outputLabel for="campaignId" value="Campaign ID:" />
                <p:inputText value="#{campaign.selectedCampaign.campaignId}" id="campaignId" required="true" label="Campaign ID" />

                <h:outputLabel for="startDate" value="Start Date:" />
                <p:inputText value="#{campaign.selectedCampaign.startDate}" id="startDate" required="true" label="Start Date" />

                <f:facet name="footer">
                    <p:commandButton id="createCampaignButton" value="Create" update=":growl" actionListener="#{campaign.createCampaign()}" />
                </f:facet>
            </h:panelGrid>
        </p:dialog>

    </h:form>

</ui:composition>

And the backing bean:

@ManagedBean
@ViewScoped
public class Campaign implements Serializable {

    private List<CampaignBean> allCampaigns;
    private CampaignBean selectedCampaign;

    public Campaign() {
        MyProxy proxy = new MyProxy();
        try {
            CampaignsResponse response = proxy.getAllCampaigns();
            if (response != null) {
                setAllCampaigns(new ArrayList<CampaignBean>(Arrays
                        .asList(response.getCampaigns())));
            }
        } catch (RemoteException e) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage("Error",
                    "Problem listing campaigns"));
        }
    }

    public void createCampaign() {

    }


    /* Getters and Setters */
    public List<CampaignBean> getAllCampaigns() {
        return allCampaigns;
    }

    public void setAllCampaigns(List<CampaignBean> allCampaigns) {
        this.allCampaigns = allCampaigns;
    }

    public CampaignBean getSelectedCampaign() {
        return selectedCampaign;
    }

    public void setSelectedCampaign(CampaignBean selectedCampaign) {
        this.selectedCampaign = selectedCampaign;
    }


}

The form is not populated with the selected row values!

Upvotes: 3

Views: 1083

Answers (1)

Gaurav Sharma
Gaurav Sharma

Reputation: 4052

I finally figured out what the problem was. The entire table was inside a "TabView" component. I was using the wrong selector i.e. instead of using update=":form:createForm" I should have used update=":tabView:form:createForm" and remove the type="button" declaration.

Upvotes: 2

Related Questions