Jsf <;p:inputText>;不更新的值
我有一张有用户的桌子。我可以注册一个新用户并从表中删除任何学生。但“编辑用户”不起作用。我不知道为什么。在我的jsf页面上注册一个新用户按钮,如下所示: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=
<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,这确实只是猜测。