Jsf <;p:inputText>;不更新的值

Jsf <;p:inputText>;不更新的值,jsf,primefaces,Jsf,Primefaces,我有一张有用户的桌子。我可以注册一个新用户并从表中删除任何学生。但“编辑用户”不起作用。我不知道为什么。在我的jsf页面上注册一个新用户按钮,如下所示: <p:commandButton id="submit" value="Create Student" update=":dataTable" actionListener="#{studentManagedBean.createStudent()}" /> <p:layout id="layout" styleClass=

我有一张有用户的桌子。我可以注册一个新用户并从表中删除任何学生。但“编辑用户”不起作用。我不知道为什么。在我的jsf页面上注册一个新用户按钮,如下所示:

<p:commandButton id="submit" value="Create Student" update=":dataTable" actionListener="#{studentManagedBean.createStudent()}" />
<p:layout id="layout" styleClass="reg-student-layout">
            <p:layoutUnit id="layoutRegister" position="west" resizable="false" size="225">
                <h:form id="registerForm">
                    <h3>Registrera ny student</h3>

                    <h:outputText value="Förnamn"/><h:message for="first_name"/>
                    <br><p:inputText id="first_name" value="#{studentManagedBean.student.firstName}"/></br>

                    <h:outputText value="Efternamn"/><h:message for="last_name"/>
                    <br><p:inputText id="last_name" value="#{studentManagedBean.student.lastName}"/></br>

                    <h:outputText value="Telefon"/><h:message for="tel_number"/>
                    <br><p:inputText id="tel_number" value="#{studentManagedBean.student.telefon}"/></br>

                    <h:outputText value="Adress"/><h:message for="address"/>
                    <br><p:inputText id="address" value="#{studentManagedBean.student.address}"/></br>

                    <h:outputText value="Email"/><h:message for="email"/>
                    <br><p:inputText id="email" value="#{studentManagedBean.student.email}"/></br>

                    <h:outputText value="Start Date"/><h:message for="start_date"/><br/>
                    <p:calendar id="start_date" value="#{studentManagedBean.student.startDate}" pattern="dd-MM-yyyy" /><br/>

                    <br><p:commandButton id="submit" value="Skapa Student" update="registerForm, :dataTable"
                                         actionListener="#{studentManagedBean.createStudent()}" /></br>
                </h:form>
            </p:layoutUnit>

            <!-- TABLE VIEW -->
            <p:layoutUnit id="layoutTable" position="center">
                <p:dataTable id="dataTable" value="#{studentManagedBean.getStudents()}" var="std">

                    <p:column>
                        <f:facet name="header">Förnamn</f:facet>
                        <p:outputLabel value="#{std.firstName}" rendered="#{std.editable eq '0'.charAt(0)}"/>
                        <p:inputText value="#{std.firstName}" rendered="#{std.editable eq '1'.charAt(0)}"/>
                    </p:column>

                    <p:column>
                        <f:facet name="header">Efternamn</f:facet>
                        <p:outputLabel value="#{std.lastName}" rendered="#{std.editable eq '0'.charAt(0)}"/>
                        <p:inputText value="#{std.lastName}" rendered="#{std.editable eq '1'.charAt(0)}"/>
                    </p:column>

                    <p:column>
                        <f:facet name="header">Telefon</f:facet>
                        <p:outputLabel value="#{std.telefon}" rendered="#{std.editable eq '0'.charAt(0)}"/>
                        <p:inputText value="#{std.telefon}" rendered="#{std.editable eq '1'.charAt(0)}"/>
                    </p:column>

                    <p:column>
                        <f:facet name="header">Adress</f:facet>
                        <p:outputLabel value="#{std.address}" rendered="#{std.editable eq '0'.charAt(0)}"/>
                        <p:inputText value="#{std.address}" rendered="#{std.editable eq '1'.charAt(0)}"/>
                    </p:column>

                    <p:column>
                        <f:facet name="header">Email</f:facet>
                        <p:outputLabel value="#{std.email}" rendered="#{std.editable eq '0'.charAt(0)}"/>
                        <p:inputText value="#{std.email}" rendered="#{std.editable eq '1'.charAt(0)}"/>
                    </p:column>

                    <p:column>
                        <f:facet name="header">Registrerad</f:facet>
                        <p:outputLabel value="#{std.startDate}" rendered="#{std.editable eq '0'.charAt(0)}">
                            <f:convertDateTime pattern="dd-MM-yyyy"/>
                        </p:outputLabel>

                        <p:inputText value="#{std.startDate}" rendered="#{std.editable eq '1'.charAt(0)}">
                            <f:convertDateTime pattern="dd-MM-yyyy"/>
                        </p:inputText>
                    </p:column>

                    <p:column>
                        <f:facet name="header">Edit</f:facet>
                        <p:commandLink value="edit" update=":dataTable" action="#{studentManagedBean.editStudent(std)}" rendered="#{std.editable eq '0'.charAt(0)}"/>

                        <p:commandLink style="color: royalblue" value="save" update=":dataTable" action="#{studentManagedBean.editStudent(std)}" rendered="#{std.editable eq '1'.charAt(0)}"/>
                    </p:column>

                    <p:column>
                        <f:facet name="header">Ta bort</f:facet>
                        <p:commandLink value="delete" update=":dataTable" action="#{studentManagedBean.deleteStudent(std)}"/>
                    </p:column>
                </p:dataTable>
            </p:layoutUnit>
        </p:layout>
它正在从我的数据库中删除所选学生,并更新我的

编辑命令链接如下所示

<p:commandLink value="delete" update=":dataTable" action="#{studentManagedBean.deleteStudent(std)}"/>
<p:commandLink value="edit" update=":dataTable" action="#{studentManagedBean.editStudent(std)}" rendered="#{std.editable eq '0'}"/>            
<p:commandLink value="save" update=":dataTable" action="#{studentManagedBean.editStudent(std)}" rendered="#{std.editable eq '1'}"/>
<p:outputLabel value="#{std.firstName}" rendered="#{std.editable eq '0'}"/>
<p:inputText value="#{std.firstName}" rendered="#{std.editable eq '1'}"/>
public void editStudent(Student std) {
   if(std.getEditable() == '0') {
     std.setEditable('1');
   } else {
     std.setEditable('0');
   }
   studentFacade.edit(std);
}
public void edit(Student entity) {
   getEntityManager().merge(entity);
}
我在调用
studentFacade.edit(std)
方法之前手动更改可编辑列。它会以DB fine更新新的可编辑值。它只是没有从inputText字段中获取新编辑的值

studentFacade.edit方法如下所示

<p:commandLink value="delete" update=":dataTable" action="#{studentManagedBean.deleteStudent(std)}"/>
<p:commandLink value="edit" update=":dataTable" action="#{studentManagedBean.editStudent(std)}" rendered="#{std.editable eq '0'}"/>            
<p:commandLink value="save" update=":dataTable" action="#{studentManagedBean.editStudent(std)}" rendered="#{std.editable eq '1'}"/>
<p:outputLabel value="#{std.firstName}" rendered="#{std.editable eq '0'}"/>
<p:inputText value="#{std.firstName}" rendered="#{std.editable eq '1'}"/>
public void editStudent(Student std) {
   if(std.getEditable() == '0') {
     std.setEditable('1');
   } else {
     std.setEditable('0');
   }
   studentFacade.edit(std);
}
public void edit(Student entity) {
   getEntityManager().merge(entity);
}
我无法从jsf页面将新编辑的值抓取到
editStudent
方法中。我错过了什么

编辑:

char对我的渲染元素没有问题。但我将char改为string,并用这个替换了旧的渲染
rendered=“#{std.editable eq'0'.charAt(0)}”
相同的结果。看看这两张照片

在这种情况下,我无法删除渲染。否则,表视图将看起来不一样。有更好的解决办法吗

编辑2:

1) 我使用MySQL,它不支持布尔值为true或false,而是支持0或非0值。因此,我不能使用
rendered=“#{std.editable}”
可以吗

2) 我在datatable中没有
标记。完整的xhtml页面如下所示:

<p:commandButton id="submit" value="Create Student" update=":dataTable" actionListener="#{studentManagedBean.createStudent()}" />
<p:layout id="layout" styleClass="reg-student-layout">
            <p:layoutUnit id="layoutRegister" position="west" resizable="false" size="225">
                <h:form id="registerForm">
                    <h3>Registrera ny student</h3>

                    <h:outputText value="Förnamn"/><h:message for="first_name"/>
                    <br><p:inputText id="first_name" value="#{studentManagedBean.student.firstName}"/></br>

                    <h:outputText value="Efternamn"/><h:message for="last_name"/>
                    <br><p:inputText id="last_name" value="#{studentManagedBean.student.lastName}"/></br>

                    <h:outputText value="Telefon"/><h:message for="tel_number"/>
                    <br><p:inputText id="tel_number" value="#{studentManagedBean.student.telefon}"/></br>

                    <h:outputText value="Adress"/><h:message for="address"/>
                    <br><p:inputText id="address" value="#{studentManagedBean.student.address}"/></br>

                    <h:outputText value="Email"/><h:message for="email"/>
                    <br><p:inputText id="email" value="#{studentManagedBean.student.email}"/></br>

                    <h:outputText value="Start Date"/><h:message for="start_date"/><br/>
                    <p:calendar id="start_date" value="#{studentManagedBean.student.startDate}" pattern="dd-MM-yyyy" /><br/>

                    <br><p:commandButton id="submit" value="Skapa Student" update="registerForm, :dataTable"
                                         actionListener="#{studentManagedBean.createStudent()}" /></br>
                </h:form>
            </p:layoutUnit>

            <!-- TABLE VIEW -->
            <p:layoutUnit id="layoutTable" position="center">
                <p:dataTable id="dataTable" value="#{studentManagedBean.getStudents()}" var="std">

                    <p:column>
                        <f:facet name="header">Förnamn</f:facet>
                        <p:outputLabel value="#{std.firstName}" rendered="#{std.editable eq '0'.charAt(0)}"/>
                        <p:inputText value="#{std.firstName}" rendered="#{std.editable eq '1'.charAt(0)}"/>
                    </p:column>

                    <p:column>
                        <f:facet name="header">Efternamn</f:facet>
                        <p:outputLabel value="#{std.lastName}" rendered="#{std.editable eq '0'.charAt(0)}"/>
                        <p:inputText value="#{std.lastName}" rendered="#{std.editable eq '1'.charAt(0)}"/>
                    </p:column>

                    <p:column>
                        <f:facet name="header">Telefon</f:facet>
                        <p:outputLabel value="#{std.telefon}" rendered="#{std.editable eq '0'.charAt(0)}"/>
                        <p:inputText value="#{std.telefon}" rendered="#{std.editable eq '1'.charAt(0)}"/>
                    </p:column>

                    <p:column>
                        <f:facet name="header">Adress</f:facet>
                        <p:outputLabel value="#{std.address}" rendered="#{std.editable eq '0'.charAt(0)}"/>
                        <p:inputText value="#{std.address}" rendered="#{std.editable eq '1'.charAt(0)}"/>
                    </p:column>

                    <p:column>
                        <f:facet name="header">Email</f:facet>
                        <p:outputLabel value="#{std.email}" rendered="#{std.editable eq '0'.charAt(0)}"/>
                        <p:inputText value="#{std.email}" rendered="#{std.editable eq '1'.charAt(0)}"/>
                    </p:column>

                    <p:column>
                        <f:facet name="header">Registrerad</f:facet>
                        <p:outputLabel value="#{std.startDate}" rendered="#{std.editable eq '0'.charAt(0)}">
                            <f:convertDateTime pattern="dd-MM-yyyy"/>
                        </p:outputLabel>

                        <p:inputText value="#{std.startDate}" rendered="#{std.editable eq '1'.charAt(0)}">
                            <f:convertDateTime pattern="dd-MM-yyyy"/>
                        </p:inputText>
                    </p:column>

                    <p:column>
                        <f:facet name="header">Edit</f:facet>
                        <p:commandLink value="edit" update=":dataTable" action="#{studentManagedBean.editStudent(std)}" rendered="#{std.editable eq '0'.charAt(0)}"/>

                        <p:commandLink style="color: royalblue" value="save" update=":dataTable" action="#{studentManagedBean.editStudent(std)}" rendered="#{std.editable eq '1'.charAt(0)}"/>
                    </p:column>

                    <p:column>
                        <f:facet name="header">Ta bort</f:facet>
                        <p:commandLink value="delete" update=":dataTable" action="#{studentManagedBean.deleteStudent(std)}"/>
                    </p:column>
                </p:dataTable>
            </p:layoutUnit>
        </p:layout>

注册学生














费尔南姆 埃弗特纳姆 电传 地址 电子邮件 寄存器读取 编辑 塔博特
如果我试图在
内使用
标记,则会出现此错误<代码>找不到从“registerForm:submit”引用的表达式为“:dataTable”的组件。我尝试了注册按钮更新属性中的所有组合。没有任何成功。例如:
update=“registerForm,:dataTableId”
update=“registerForm,:formId:dataTableId”
(当我使用表单时),
update=“registerForm,:layoutunid:formId:dataTableId”


3) 我打印出来,从现有对象中获取所有字段值。那里没什么问题。

我发现了我的问题。在我的editStudent方法中,我使用了全局学生实例,而不是传递到方法中的实例(std),它工作得很好

public void editStudent(Student std) {
   if(std.getEditable() == '0') {
     std.setEditable('1');
   } else {
     std.setEditable('0');
   }
   studentFacade.edit(student);
}

要排除一个和另一个,请删除渲染的
,然后重试。EL不喜欢这种方式的
char
,应该以不同的方式进行(通常,使用枚举,或者在这种情况下,使用简单的
boolean
,因为显然没有其他状态)。可能重复:@BalusC谢谢你的回答。我查看了你提供的链接,但它对我没有帮助。我添加了两个屏幕截图来显示我的问题。您不需要永久删除渲染的
。只需测试一次,这样您就可以排除它的逻辑是您面临的问题的原因。这样做,如果它起作用,那么我们就知道这确实是这一切的原因,然后我们就知道在哪里寻找解决问题的方法。确定问题原因的方法之一就是简单地消除。最好按照中的说明创建一个MCVE,否则你只能得到盲目的/经过教育的猜测作为答案,而不是准确解释和解决你真正的问题。@BalusC我按照你的说明做了。已删除渲染并尝试,但仍不起作用。我发现了你回答的另一个问题。我遵循了你的答案,但这也不起作用。没有MCVE,这确实只是猜测。