gpt4 book ai didi

java - JSF SessionScoped 属性未设置

转载 作者:行者123 更新时间:2023-12-01 04:44:57 25 4
gpt4 key购买 nike

我正在使用 SessionScoped bean 来存储我从使用 JPA 的 ClientService 中检索的 Client 对象。当我的网页加载时,我传递一个 GET Id 参数来检索正确的 Client 对象。一切都很顺利,但是当我尝试编辑客户端对象属性时,由于某种原因它不会改变。

这是我的代码:

查看:

<?xml version='1.0' encoding='UTF-8' ?>
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">


<body>

<ui:composition template="./../../WEB-INF/templates/master.xhtml">

<ui:define name="functions">
<li><h:link outcome="clients/overview"><i class="icon-chevron-right"></i> <h:outputText value="#{trans['sidebar.links.overview']}" /> </h:link></li>
</ui:define>

<ui:define name="page-header">
Edit - Clients
</ui:define>

<ui:define name="content">

<f:metadata>
<f:viewParam name="id" value="#{editClientBean.id}" required="false"/>
<f:event type="preRenderComponent" listener="#{editClientBean.findClient()}"/>
</f:metadata>


<h:form class="form-horizontal">
<div class="control-group">
<label class="control-label" for="inputEmail">Firstname</label>
<div class="controls">
<h:inputText value="#{editClientBean.client.firstname}" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="inputPassword">Lastname</label>
<div class="controls">
<h:inputText value ="#{editClientBean.client.lastname}" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="inputPassword">Birthdate</label>
<div class="controls">
<h:inputText value ="#{editClientBean.client.dateToString()}" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="inputPassword">City</label>
<div class="controls">
<h:inputText value ="#{editClientBean.client.city}" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="inputPassword">Address</label>
<div class="controls">
<h:inputText value ="#{editClientBean.client.address}" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="inputPassword">Zip</label>
<div class="controls">
<h:inputText value ="#{editClientBean.client.zipcode}" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="inputPassword">Info</label>
<div class="controls">
<h:inputText value ="#{editClientBean.client.info}" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="inputPassword">Info</label>
<div class="controls">
<h:inputText value ="#{editClientBean.client.info}" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="inputPassword">Email</label>
<div class="controls">
<h:inputText value ="#{editClientBean.client.email}" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="inputPassword">Password</label>
<div class="controls">
<h:inputSecret value="#{editClientBean.client.password}" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="inputPassword">Cartrack ID(s)</label>
<div class="controls">

</div>
</div>

<div class="control-group">
<div class="controls">

<h:commandButton value="Change" >
<f:ajax listener="#{editClientBean.edit}" />
</h:commandButton>
</div>
</div>

</h:form>

</ui:define>

</ui:composition>

</body>
</html>

bean :

package Beans;

import Entities.Cartrack;
import Entities.Client;
import Services.CarTrackService;
import Services.ClientService;
import java.io.Serializable;
import java.util.List;
import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named;

/**
*
* @author Roel
*/
@Named
@SessionScoped
public class EditClientBean implements Serializable {

@Inject
private ClientService clientService;
@Inject
private CarTrackService cartrackService;
private Client client;
private Long id;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public void findClient(){
this.client = this.clientService.Find(this.id);
}

/**
* @return the client
*/
public Client getClient() {
return client;
}

/**
* @param client the client to set
*/
public void setClient(Client client) {
this.client = client;
}

public List<Cartrack> getCarTracks(){
return this.cartrackService.FindAll();
}

public void edit(){
System.out.println(this.client.getFirstname());
System.out.println(this.client.getCartracks().size());


//this.clientService.Edit(this.client);
}
}

最佳答案

编辑后的表单值不会在启用 Ajax 的 commandButton 上提交,除非在 execute 属性中明确命名。尝试添加这个:

<h:commandButton  value="Change" >
<f:ajax execute="@form" render="@form" listener="#{editClientBean.edit}" />
</h:commandButton>

@formexecuterender 属性中的保留关键字,用于指示 Ajax 表单提交包含表单命名容器和该表格内的所有 child 。您指定提交要应用于模型的所有表单值,然后在 render 属性中指示在服务器端处理后重新渲染所有表单元素。

关于java - JSF SessionScoped 属性未设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16012193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com