这两个版本的JSF(JSF 1.0和JSF 2.0)有什么区别?由于我是java的新手,我只发现建筑级别的差异.但是,从视角来看,我无法知道它对应用程序开发有多大影响?
此外,强加的MVC与JSF和Spring不同.即使JSF改进了架构,Spring仍然使用得更多.Spring的重要性在上面有什么意义?
我有2页.


当我单击列表页面上的编辑图标时,我想在添加页面上显示所选数据以进行编辑,如果单击保存按钮则更新其数据.这该怎么做?
我的Mojarra 2.1.6 Web应用程序有问题,我正在使用@ViewScoped托管bean 开发它,每个bean都附加到xhtml页面.这个页面正在接收一些视图参数,并在以这种方式初始化bean之后:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui"
template="/templates/general_template.xhtml">
<ui:define name="metadata">
<f:metadata>
<f:viewParam id="user" name="user"
value="#{navegableUserData._ParamUser}" />
<f:viewParam id="NavIndex" name="NavIndex"
value="#{navegableUserData._QueueIndex}" />
<f:event type="preRenderView"
listener="#{navegableUserData.initialize}" />
</f:metadata>
<h:message for="user" />
</ui:define>
<ui:define name="general_content">
<p:outputPanel autoUpdate="false" id="Datos_Loged" name="Datos_Loged"
layout="block">
<h:form id="SystemUserForm">
<ui:include
src="/system/manage_user/content/edit_user/system_user_data/system_user.xhtml">
<ui:param name="manager" value="#{navegableUserData}" />
</ui:include>
</h:form>
</p:outputPanel>
</ui:define>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我将我的页面嵌套到一个通用模板中,看起来像这样:
<?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:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui" xmlns:o="http://omnifaces.org/ui">
<h:head> …Run Code Online (Sandbox Code Playgroud) 让我们想象一下,我的JSF 2应用程序中有两个页面:第一页显示一个对象表(汽车或其他),另一个页面能够显示一个特定对象的详细信息.表页面位于请求范围内,因为每次用户请求时都应重新加载对象.详细信息页面在视图范围内.因此,当我单击表格内的对象时,该对象应显示在详细信息页面中.通过重定向,我可以转到详细信息页面,但详细信息页面为空,因为生成了新的vew.好吧,我可以将范围更改为会话但这会导致其他问题,所以我希望在视图范围内有详细信息页面.有没有办法将参数传递给新生成的视图范围bean?
更新1
这是第一次尝试使用视图参数的代码片段.评论说这不起作用.该值作为请求参数传递,但在目标页面中,该值为null.
表格页面:
<h:button value="Go to details" outcome="targetPage">
<f:param name="carId" value="This is a test" />
</h:button>
Run Code Online (Sandbox Code Playgroud)
详情页面:
<f:metadata>
<f:viewParam name="carId" value="#{bean.id}" />
<f:event type="preRenderView" listener="#{bean.loadData}"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
豆的详细信息页面:
private String id;
public String getId() {
return id;
}
public void setId( String id ) {
this.id = id;
}
public void loadData() {
System.out.println( "Id: " + id );
}
Run Code Online (Sandbox Code Playgroud)
更新2
我发现了自己的错误.元数据部分位于模板文件中.当我将标签放入主文件的详细信息页面时,它可以工作.非常感谢你.
我有一个一行的数据表,我需要编辑这一行的字段,所以我有一些带有值的 inputText,但是当我编辑它们并单击命令按钮(调用方法“actualizarUsuario”时,这些值作为空值。
这是我的豆代码:
@ManagedBean(name = "user")
@ViewScoped
public class userDetalles implements Serializable {
private Usuario u;
private usuarioController controlador;
Rol rol;
private long selection;
private long selectionrol;
Agrupacion agrupacion;
private Privilegio privilegio;
private RolController controladorRol;
private ControladorAgrupaciones controladorAgrup;
private String nombres;
private String apellidoP;
private String apellidoM;
private Boolean check;
@PostConstruct
public void init() {
rol= new Rol() ;
u=new Usuario();
agrupacion=new Agrupacion();
privilegio=new Privilegio();
controlador= new usuarioController();
controladorRol=new RolController();
controladorAgrup=new ControladorAgrupaciones();
Usuario u=new Usuario();
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext …Run Code Online (Sandbox Code Playgroud) jsf-2 ×4
java ×2
jsf ×2
primefaces ×2
frameworks ×1
managed-bean ×1
parameters ×1
scope ×1
view ×1