Reputation: 89
I have dataTable with row editing, but i dont need to edit one of my cells (user.username). How can i do this in primefaces? Is this possible? I try remove p:cellEditor for one cell but it does not work on my tablet because when I use this in a DataTable, this column is empty.
Thanks!
my code:
<h:form id="form">
<p:growl id="messages" showDetail="true" />
<p:contextMenu for="dataTable">
<p:menuitem value="Delete" update="dataTable" icon="ui-icon-close"
actionListener="#{userMB.deleteUser}" />
</p:contextMenu>
<p:dataTable id="dataTable" var="user" styleClass="DataTableUsers"
value="#{userMB.userList}" paginator="true" rows="5"
rowKey="#{user.user_id}" selection="#{userMB.selectedUser}"
selectionMode="single" filteredValue="#{userMB.filteredUsers}"
editable="true"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15">
<p:ajax event="rowEdit" immediate="true" listener="#{userMB.onEdit}"
update=":form:messages, :form:dataTable" process="@this" />
<p:column sortBy="name" filterBy="name" id="name" headerText="Name">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{user.name}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{user.name}" required="true"
requiredMessage="Please Enter Name"
validatorMessage="Name is too short!">
<f:validateLength minimum="2"></f:validateLength>
</p:inputText>
</f:facet>
</p:cellEditor>
</p:column>
<p:column sortBy="surname" filterBy="surname" headerText="Surname">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{user.surname}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{user.surname}" required="true"
requiredMessage="Please Enter Surname!"
validatorMessage="Surname is too short!">
<f:validateLength minimum="2"></f:validateLength>
</p:inputText>
</f:facet>
</p:cellEditor>
</p:column>
<p:column sortBy="username" filterBy="username"
headerText="Index number">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{user.username}" />
</f:facet>
<f:facet name="input">
<h:inputText value="#{user.username}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column sortBy="userDescription" filterBy="userDescription"
headerText="descript">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{user.userDescription}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{user.userDescription}" required="true"
requiredMessage="Please Enter User Description" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column style="width:6%" headerText="Edit">
<p:rowEditor />
</p:column>
<f:facet name="footer">
<p:commandButton value="New User" oncomplete="newUserDialog.show()"
icon="ui-icon-star" title="Creates new user" />
</f:facet>
</p:dataTable>
</h:form>
Upvotes: 1
Views: 1940
Reputation: 62864
Just change the component that holds the user.username
value to <h:outputText>
<h:outputText value="#{user.username}" />
and you will have the value read-only.
Upvotes: 3