Java 使用JSF编辑一行mysql

Java 使用JSF编辑一行mysql,java,eclipse,jsf,jakarta-ee,Java,Eclipse,Jsf,Jakarta Ee,我在xhtml页面上获取mysql“login”表数据,然后尝试编辑一行,然后更新它。问题是,当我单击单行的“编辑”列时,所有行都变为可编辑。我的xhtml页面代码是: <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-

我在xhtml页面上获取mysql“login”表数据,然后尝试编辑一行,然后更新它。问题是,当我单击单行的“编辑”列时,所有行都变为可编辑。我的xhtml页面代码是:

        <?xml version="1.0" encoding="ISO-8859-1" ?>
<!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">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

<title>Users</title>
 <h:outputStylesheet library="css" name="style.css" />
</h:head>
<h:body>

<h1>Users</h1>

        <h:form>
      <h:dataTable value="#{loginBean.list}"  var="list" border="1">
         <h:column>                 
            <f:facet name="header">Name</f:facet>  
            <h:inputText value="#{list.UName}" size="10" rendered="#{list.isEditable}" />               
            <h:outputText value="#{list.UName}" rendered="#{not list.isEditable}" />
         </h:column>
         <h:column>
            <f:facet name="header">Email</f:facet>
            <h:inputText value="#{list.emailAdd}" size="10" rendered="#{list.isEditable}" />                
            <h:outputText value="#{list.emailAdd}" rendered="#{not list.isEditable}" />
         </h:column>
          <h:column>
            <f:facet name="header">Password</f:facet>
            <h:inputText value="#{list.pword}" size="10" rendered="#{list.isEditable}" />               
            <h:outputText value="#{list.pword}" rendered="#{not list.isEditable}" />
         </h:column>

         <h:column>
            <f:facet name="header">Edit</f:facet>
            <h:commandLink value="Edit" action="#{loginBean.editable(list)}"/>
         </h:column>

         <h:column>
            <f:facet name="header">Update</f:facet>
            <h:commandLink value="Update" action="#{loginBean.updateAction()}"  />
         </h:column>

       <h:column>
            <f:facet name="header">Delete</f:facet>
            <h:commandLink value="Delete" action="#{loginBean.deleteAction(list)}" />
       </h:column>


      </h:dataTable>
   </h:form>


</h:body>
</html>

问题是,您对所有行使用相同的布尔状态,每行需要单独的状态

因此,替换

<h:column>                 
<f:facet name="header">Name</f:facet>  
<h:inputText value="#{list.UName}" size="10" rendered="#{loginBean.isEditable}"/>              
<h:outputText value="#{list.UName}" rendered="#{not loginBean.isEditable}" />
</h:column>
<h:column>
<f:facet name="header">Email</f:facet>
<h:inputText value="#{list.emailAdd}" size="10" rendered="#{loginBean.isEditable}"/>               
<h:outputText value="#{list.emailAdd}" rendered="#{not loginBean.isEditable}" />
</h:column>
<h:column>
<f:facet name="header">Password</f:facet>
<h:inputText value="#{list.pword}" size="10" rendered="#{loginBean.isEditable}"/>              
<h:outputText value="#{list.pword}" rendered="#{not loginBean.isEditable}" />
</h:column>
进入您的
登录
实体

编辑:根据评论部分,如何在操作后更新视图?

使用Ajax,您的链接变得

<h:commandLink value="Edit" action="#{loginBean.editable(list)}">
<f:ajax render="yourDataTable"/>
</h:commandLink>


另请参见

@BalucC我已做出更改,并编辑了问题。请复习。现在,当我单击编辑链接时,什么也没有发生,没有字段是可编辑的。您添加了
rowStatePreserved=“true”
。。为什么?请修改您的问题,以便我们可以查看范围等。顺便说一句,我不是BalucC。对不起,我已经做了更改,请查看,结果没有更改,单击EditsivaGranuan仍然没有任何变化。是的,它被调用,我已经检查过了。它还调用登录实体setiseditable。但他们什么也不做,我不知道为什么
<h:column>                 
<f:facet name="header">Name</f:facet>  
<h:inputText value="#{list.UName}" size="10" rendered="#{loginBean.isEditable}"/>              
<h:outputText value="#{list.UName}" rendered="#{not loginBean.isEditable}" />
</h:column>
<h:column>
<f:facet name="header">Email</f:facet>
<h:inputText value="#{list.emailAdd}" size="10" rendered="#{loginBean.isEditable}"/>               
<h:outputText value="#{list.emailAdd}" rendered="#{not loginBean.isEditable}" />
</h:column>
<h:column>
<f:facet name="header">Password</f:facet>
<h:inputText value="#{list.pword}" size="10" rendered="#{loginBean.isEditable}"/>              
<h:outputText value="#{list.pword}" rendered="#{not loginBean.isEditable}" />
</h:column>
<h:column>                 
<f:facet name="header">Name</f:facet>  
<h:inputText value="#{list.UName}" size="10" rendered="#{list.isEditable}"/>              
<h:outputText value="#{list.UName}" rendered="#{not list.isEditable}" />
</h:column>
<h:column>
<f:facet name="header">Email</f:facet>
<h:inputText value="#{list.emailAdd}" size="10" rendered="#{list.isEditable}"/>               
<h:outputText value="#{list.emailAdd}" rendered="#{not list.isEditable}" />
</h:column>
<h:column>
<f:facet name="header">Password</f:facet>
<h:inputText value="#{list.pword}" size="10" rendered="#{list.isEditable}"/>              
<h:outputText value="#{list.pword}" rendered="#{not list.isEditable}" />
</h:column>
@Transient
private boolean isEditable;

//+ getter and setter
<h:commandLink value="Edit" action="#{loginBean.editable(list)}">
<f:ajax render="yourDataTable"/>
</h:commandLink>