Jsf 为什么f:viewParam中的数据在单击按钮之前消失
我正在JSF上开发一个简单的CRUD,我有一个视图可以重定向到另一个视图,我应该在其中完成表单并更新元素,但由于某些原因,视图参数的数据在单击更新按钮之前消失了 这是我的密码: StateList.xhtmlJsf 为什么f:viewParam中的数据在单击按钮之前消失,jsf,primefaces,Jsf,Primefaces,我正在JSF上开发一个简单的CRUD,我有一个视图可以重定向到另一个视图,我应该在其中完成表单并更新元素,但由于某些原因,视图参数的数据在单击更新按钮之前消失了 这是我的密码: StateList.xhtml ... <p:column headerText="Accion"> <p:button icon="pi pi-pencil"
...
<p:column headerText="Accion">
<p:button icon="pi pi-pencil"
value="Editar"
styleClass="edit-button rounded-button success-button"
process="@this"
outcome="StateEdit"
>
<f:param name="id" value="#{stateItem.id}"/>
</p:button>
。。。
状态编辑
<ui:define name="metadata">
<f:metadata>
<f:viewParam name="id" value="#{stateController.recivedId}"/>
</f:metadata>
</ui:define>
<ui:define name="title">Editar estado</ui:define>
<ui:define name="viewname">
<li>Inicio</li>
<li><i class="fa fa-angle-right"/></li>
<li><p:link outcome="/admin/StateList">Lista de Estados</p:link></li>
<li><i class="fa fa-angle-right"/></li>
<li><p:link outcome="/admin/StateList">Editar estado</p:link></li>
</ui:define>
<ui:param name="viewname" value="Editar Estado"/>
<ui:define name="content">
<div class="p-grid form-superfinanciera">
<div class="p-col-12">
<div class="card">
<p:growl id="messages" showDetail="true" />
<h4>Editar Estado</h4>
<h:form>
<p:growl id="growl" showDetail="true" sticky="true" />
<p:outputPanel id="businessProcessContent">
<div class="ui-fluid p-formgrid p-grid">
<div class="p-field p-col-12 p-md-6">
<p:outputLabel for="name" value="Nombre"/>
<p:inputText id="name" required="true" requiredMessage="Nombre requerido" value="#{stateController.newName}"/>
<p:message for="name" display="icon" />
</div>
</div>
</p:outputPanel>
<p:commandButton id="submitButton"
value="Confirmar cambios"
update="businessProcessContent :messages"
process="businessProcessContent @this"
actionListener="#{stateController.updateState()}"
/>
</h:form>
</div>
</div>
</div>
</ui:define>
</ui:composition>
伊迪塔·埃斯塔多
伊尼西奥
埃斯塔多斯酒店
伊迪塔·埃斯塔多
伊迪塔·埃斯塔多
StateController.java
@Named
@ViewScoped
public class StateController {
@Inject
private StateList stateList;
@Inject
private StateStore store;
@Inject
private StateDao stateDao;
@Named
@Produces
private State newState;
@Getter
@Setter
private String newName;
@Getter
@Setter
private Long recivedId;
@Getter
@Setter
private Integer searchID;
@Getter
@Setter
private String searchName;
@PostConstruct
public void initNewState() {
this.newState = new State();
}
public void initExistentState(){
try {
recivedId = Long.valueOf(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id"));
this.newState = stateDao.getSingle(recivedId);
}
catch (Exception ex){
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"ERROR","" ) );
}
}
public void setCurrentState(State state){
store.set(state);
}
public void setStateResults(List<State> stateResults) {
this.stateResults = stateResults;
}
private List<State> stateResults;
public List<State> getStateResults() {
if(stateResults==null) {
stateResults=stateDao.getAll();
}
return stateResults;
}
public List<State> getFilteredResults(){
stateResults= stateDao.getFiltered(searchID,searchName);
return stateResults;
}
public void deleteState(){
stateDao.delete(stateDao.getSingle(recivedId));
stateList.invalidate();
store.unset();
}
public void createState() {
stateList.invalidate();
stateDao.create(newState);
store.set(newState);
initNewState();
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage("Transacción exitosa", "Se ha guardado el estado") );
}
public void updateState(){
stateList.invalidate();
State tate = newState;
newState.setName(newName);
stateDao.update(newState);
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage("Transacción exitosa", "Actualizacion completada"));
}
}
@Named
@视域
公共类状态控制器{
@注入
私有状态列表状态列表;
@注入
私人商店;
@注入
私有的StateDao StateDao;
@命名
@产生
私营国家新闻局;
@吸气剂
@塞特
私有字符串newName;
@吸气剂
@塞特
私人长期收受ID;
@吸气剂
@塞特
私有整数搜索ID;
@吸气剂
@塞特
私有字符串搜索名称;
@施工后
public void initNewState(){
this.newState=新状态();
}
public void initExistentState(){
试一试{
recivedId=Long.valueOf(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(“id”);
this.newState=stateDao.getSingle(recivedId);
}
捕获(例外情况除外){
FacesContext context=FacesContext.getCurrentInstance();
addMessage(null,新的FacesMessage(FacesMessage.SEVERITY_ERROR,“ERROR”,“”));
}
}
公共无效setCurrentState(状态状态){
存储。设置(状态);
}
公共void setStateResults(列出stateResults){
this.stateResults=stateResults;
}
私有列表结果;
公共列表getStateResults(){
if(stateResults==null){
stateResults=stateDao.getAll();
}
返回状态结果;
}
公共列表getFilteredResults(){
stateResults=stateDao.getFiltered(searchID,searchName);
返回状态结果;
}
公共状态(){
stateDao.delete(stateDao.getSingle(recivedId));
stateList.invalidate();
store.unset();
}
public void createState(){
stateList.invalidate();
stateDao.create(newState);
store.set(newState);
initNewState();
FacesContext context=FacesContext.getCurrentInstance();
addMessage(空,新面孔消息(“Transacción exitosa”,“Se ha guardado el estado”);
}
公共屋({
stateList.invalidate();
State=newState;
newState.setName(newName);
stateDao.update(newState);
FacesContext context=FacesContext.getCurrentInstance();
addMessage(空,新面孔消息(“Transacción exitosa”、“Realizacion completada”);
}
}
ViewScoped
bean应该实现可序列化,以便它们可以在同一视图的请求之间持久化。否则,它们将在每个请求中创建,其行为类似于RequestScoped
bean
您的命令按钮是第二个请求,数据在那里丢失。您可以使bean可序列化,或者向命令按钮添加必要的参数以使用请求范围。Hi,阅读并改进问题。还添加显式版本和实现信息