gpt4 book ai didi

jsf-2 - 回发期间请求参数为空

转载 作者:行者123 更新时间:2023-12-04 05:13:39 27 4
gpt4 key购买 nike

我有一个显示用户列表的 View ,从这个 View 我可以转到任何选定用户的“详细信息”的另一个 View 。在详细信息 View 中,我需要从 2 个选择列表中选择一些值,然后在支持的 bean 中获取这些值,并将它们添加到用户以最终将用户存储(更新)到数据库中。这些是我在“用户 Bean”中的方法。

使用这种方法,我从“用户 ListView ”中获取用户 ID,并从数据库中检索用户以在详细信息 View 中显示其信息。

public void getParam(){

FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();

//Obtener parametros del request
Map<String, String> parameterMap = (Map<String, String>) externalContext.getRequestParameterMap();
Long param = Long.valueOf(parameterMap.get("id_usuario"));
System.out.println(param);
this.setU(controlador.getUser(param));


}

使用这种方法,我将选择列表中的值设置为一个对象,然后将此对象添加到用户,最后将其保存在数据库中。
public void setPrivilegio(){

System.out.println("hola");
Privilegio pri=new Privilegio();
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();

//Obtener parametros del request
Map parameterMap = externalContext.getRequestParameterMap();
Agrupacion agrupacion= (Agrupacion)parameterMap.get("agrup");
System.out.println(agrupacion.getNombre());
Rol rol = (Rol)parameterMap.get("rols");
System.out.println(rol.getNombre());
System.out.println(""+rol.getNombre()+" "+agrupacion.getNombre());
pri.setRol(rol);
pri.setAgrupacion(agrupacion);
pri.setActive(true);
this.getU().addPrivilegio(pri);

controlador.saveUsuario(this.getU());


}

这是我的观点:
<?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">
<ui:composition 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">
<div class="container">
<h:panelGroup id="Usuarios">
<h:form id="FormUsuarios">
<h2>Detalles Usuario</h2>

<h:dataTable id="users" value="#{usuario.u}" styleClass="table table-striped table-bordered" headerClass="sorting_asc"
rowClasses="odd,even">
<h:column>
<f:facet name="header">#</f:facet>
#{usuario.u.id}
</h:column>
<h:column>
<f:facet name="header">Identificador</f:facet>
<h:inputText id="identificador" value="#{usuario.u.identificador}" />
</h:column>
<h:column>
<f:facet name="header">Nombre</f:facet>
<h:inputText id="nombres" value=" #{usuario.u.nombres}"/> <h:inputText id="apellidoP" value=" #{usuario.u.apellidoPaterno}"/> <h:inputText id="apellidoM" value=" #{usuario.u.apellidoMaterno}"/>
</h:column>
<h:column>
<f:facet name="header">Active</f:facet>
<h:selectBooleanCheckbox id="check" value="#{usuario.u.active}"></h:selectBooleanCheckbox>
</h:column>

</h:dataTable>

<h3>Asignar Privilegios</h3>

<h:selectOneMenu id="agrup" value="#{usuario.selected}" converter="omnifaces.SelectItemsConverter">
<f:selectItems value="#{agrupacion.agrupacion}" var="entity" itemLabel="#{entity.nombre}" itemValue="#{entity.id}"/>
</h:selectOneMenu>

<h:selectOneMenu id="rols" value="#{rol.selected}" converter="omnifaces.SelectItemsConverter">
<f:selectItems value="#{rol.roles}" var="rol" itemLabel="#{rol.nombre}" itemValue="#{rol.id}"/>
</h:selectOneMenu>

<h:commandButton value="Asignar" styleClass="btn-primary" actionListener="#{usuario.setPrivilegio}">
</h:commandButton>


<h3>Privilegios Asignados:</h3>

<h:dataTable id="privilegios" value="#{usuario.u.privilegios}" var="p" styleClass="table table-striped table-bordered" headerClass="sorting_asc"
rowClasses="odd,even">
<h:column>
<f:facet name="header">#</f:facet>
#{p.id}
</h:column>
<h:column>
<f:facet name="header">Roles</f:facet>
#{p.rol.nombre}
</h:column>
<h:column>
<f:facet name="header">Grupos</f:facet>
#{p.agrupacion.nombre}
</h:column>
<h:column>
<f:facet name="header">Active</f:facet>
<h:selectBooleanCheckbox id="checkbox" value="#{p.active}"></h:selectBooleanCheckbox>
</h:column>

</h:dataTable>






</h:form>
<script type="text/javascript" src="js/paging-bootstrap.js"></script>
<script type="text/javascript" src="js/contenidoc.datatable.init.js"></script>
</h:panelGroup>
</div>
</ui:composition>

当我单击名为“Asignar”的命令按钮时,它会调用方法 setPrivilegio() ,我收到此错误:
java.lang.NumberFormatException: null
at java.lang.Long.parseLong(Long.java:404)
at java.lang.Long.valueOf(Long.java:540)
at cl.uchile.sti.bean.UsuarioBean.getParam(UsuarioBean.java:114)

View 中的表显示了所有信息,但是当我想调用将所选项目添加到用户并将其保存在数据库 ( setPrivilegio ) 中的方法时,我收到此错误。

这是怎么引起的,我该如何解决?

这是我的完整“用户 bean”:
@ManagedBean(name = "usuario")
@ViewScoped
public class UsuarioBean {
private usuarioController controlador;
private Usuario u=new Usuario();
private Privilegio Selected=new Privilegio();
private Boolean active;
private long id_user;

@PostConstruct
public void init() {


controlador=new usuarioController();

}


public long getId_user() {
return id_user;
}

public void setId_user(long id_user) {
this.id_user = id_user;
}

public Privilegio getSelected() {
return Selected;
}

public void setSelected(Privilegio selected) {
Selected = selected;
}

public Boolean getActive() {

return active;
}

public void setActive(Boolean active) {

this.active = active;
}

public Usuario getU() {
getParam();
return u;
}

public void setU(Usuario u) {
this.u = u;
}

private List<Usuario> usuario;



public List<Usuario> getUsuario() {
usuario=UsuarioDAO.getAll();
return usuario;
}

public Usuario getById(long id_usuario){

return u;
}

public void setUsuario(List<Usuario> usuario) {
this.usuario = usuario;
}


public void saveUsuario(Usuario u){
controlador.saveUsuario(u);
}

public void getParam(){

FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();

//Obtener parametros del request
Map<String, String> parameterMap = (Map<String, String>) externalContext.getRequestParameterMap();
Long param = Long.valueOf(parameterMap.get("id_usuario"));
System.out.println(param);
this.setU(controlador.getUser(param));


}

public void setPrivilegio(){

System.out.println("hola");
Privilegio pri=new Privilegio();
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();

//Obtener parametros del request
Map parameterMap = externalContext.getRequestParameterMap();
Agrupacion agrupacion= (Agrupacion)parameterMap.get("agrup");
System.out.println(agrupacion.getNombre());
Rol rol = (Rol)parameterMap.get("rols");
System.out.println(rol.getNombre());
System.out.println(""+rol.getNombre()+" "+agrupacion.getNombre());
pri.setRol(rol);
pri.setAgrupacion(agrupacion);
pri.setActive(true);
this.getU().addPrivilegio(pri);

controlador.saveUsuario(this.getU());


}









}

这是第一个 View (用户列表,我从中转到用户详细信息)
<?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">
<ui:composition 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">
<div class="container">
<h:panelGroup id="Usuarios">
<h:form id="FormUsuarios">
<h2>Listado de Usuarios</h2>
<h:graphicImage url="http://a.dryicons.com/images/icon_sets/simplistica/png/128x128/add.png" width="30" height="30"/>

<h:dataTable id="users" value="#{usuario.usuario}" var="o" styleClass="table table-striped table-bordered" headerClass="sorting_asc"
rowClasses="odd,even">
<h:column>
<f:facet name="header">#</f:facet>
#{o.id}
</h:column>
<h:column>
<f:facet name="header">Identificador</f:facet>
#{o.identificador}
</h:column>
<h:column>
<f:facet name="header">Nombre</f:facet>
#{o.nombres} #{o.apellidoMaterno} #{o.apellidoPaterno}
</h:column>
<h:column>
<f:facet name="header">Active</f:facet>
<h:selectBooleanCheckbox id="check" value="#{o.active}"></h:selectBooleanCheckbox>
</h:column>
<h:column>
<f:facet name="header">Detalles</f:facet>


<h:outputLink value="contenido/detalleUsuario.xhtml">
Detalle
<f:param name="id_usuario" value="#{o.id}" />
</h:outputLink>
</h:column>
</h:dataTable>
</h:form>
<script type="text/javascript" src="js/paging-bootstrap.js"></script>
<script type="text/javascript" src="js/contenidoc.datatable.init.js"></script>
</h:panelGroup>
</div>
</ui:composition>

最佳答案

糟糕的 setter/getter !

    public Usuario getU() {
getParam();
return u;
}

上面的 setter/getter 是一个非常糟糕的主意。你自己说过变量使它成为 usuario支持bean(这个我怀疑)。很简单 wrong to perform business logic inside a getter由于不一致(就像您遇到的那样)以及在请求期间多次调用 getter 的事实。有 more elegant and cleaner ways to pass and initialise parameters between JSF pages .
private Usuario u=new Usuario();也是个坏主意。为什么这有必要,当你有
      this.setU(controlador.getUser(param));

所有应该在您的 @PostConstructor 内发生的事情
    @PostConstruct
public void init() {


controlador=new usuarioController();
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();

//Obtener parametros del request
Map<String, String> parameterMap = (Map<String, String>) externalContext.getRequestParameterMap();
Long param = Long.valueOf(parameterMap.get("id_usuario"));
System.out.println(param);
this.setU(controlador.getUser(param));

}

setter/getter 应该很简单
public Usuario getU() {
return u;
}

关于jsf-2 - 回发期间请求参数为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14567920/

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