栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

动态ajax导航与

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

动态ajax导航与

对于OmniFaces,我也曾经通过在方法中创建

<o:include>
as
UIComponent
而不是a
TagHandler
进行过尝试。这样,在恢复视图阶段就可以记住正确的包含面,而包含组件树仅在渲染响应阶段发生变化,这正是我们想要实现的构造。
FaceletContext#includeFacelet()
enpreChildren()


这是一个基本的启动示例:

@FacesComponent("com.example.Include")public class Include extends UIComponentbase {    @Override    public String getFamily() {        return "com.example.Include";    }    @Override    public boolean getRendersChildren() {        return true;    }    @Override    public void enpreChildren(FacesContext context) throws IOException {        getChildren().clear();        ((FaceletContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY)).includeFacelet(this, getSrc());        super.enpreChildren(context);    }    public String getSrc() {        return (String) getStateHelper().eval("src");    }    public void setSrc(String src) {        getStateHelper().put("src", src);    }}

注册

.taglib.xml
如下:

<tag>    <tag-name>include</tag-name>    <component>        <component-type>com.example.Include</component-type>    </component>    <attribute>        <name>src</name>        <required>true</required>        <type>java.lang.String</type>    </attribute></tag>

在以下视图中可以正常工作:

<h:outputscript name="fixViewState.js" /><h:form>    <ui:repeat value="#{includeBean.includes}" var="include">        <h:commandButton value="Include #{include}" action="#{includeBean.setInclude(include)}"> <f:ajax render=":include" />        </h:commandButton>    </ui:repeat></h:form><h:panelGroup id="include">    <my:include src="#{includeBean.include}.xhtml" /></h:panelGroup>

以及以下辅助bean:

@ManagedBean@ViewScopedpublic class IncludeBean implements Serializable {    private List<String> includes = Arrays.asList("include1", "include2", "include3");    private String include = includes.get(0);    private List<String> getIncludes() {        return includes;    }    public void setInclude(String include) {        return this.include = include;    }    public String getInclude() {         return include;    }}

(此示例期望include
files

include1.xhtml
include2.xhtml
并且
include3.xhtml
与主文件位于同一基本文件夹中)

fixViewState.js
可以在这个回答中找到:H:的commandButton /
H:commandlink不首先点击工作,只能在第二次点击。为了修复JSF问题790,此脚本是必需的,从而在存在多个更新彼此父级的ajax表单时,视图状态会丢失。

还要注意,这种方式每个包含文件

<h:form>
在必要时都可以拥有自己的文件,因此您不必将其放在包含文件周围。

这种方法即使在Mojarra中也可以正常工作,即使回发请求来自include内的表单,但是在MyFaces中也很难失败,但在初始请求期间已经存在以下异常:

java.lang.NullPointerException    at org.apache.myfaces.view.facelets.impl.FaceletCompositionContextImpl.generateUniqueId(FaceletCompositionContextImpl.java:910)    at org.apache.myfaces.view.facelets.impl.DefaultFaceletContext.generateUniqueId(DefaultFaceletContext.java:321)    at org.apache.myfaces.view.facelets.compiler.UIInstructionHandler.apply(UIInstructionHandler.java:87)    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:49)    at org.apache.myfaces.view.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:158)    at org.apache.myfaces.view.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:57)    at org.apache.myfaces.view.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:48)    at org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:394)    at org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:448)    at org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:426)    at org.apache.myfaces.view.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:244)    at com.example.Include.enpreChildren(Include.java:54)

MyFaces基本上在视图构建时结束时释放Facelet上下文,使其在视图渲染时不可用,从而导致NPE,因为内部状态具有多个无效属性。但是,可以在渲染期间添加单个组件而不是Facelet文件。我真的没有时间调查这是我的错还是MyFaces的错。这就是为什么它还没有出现在OmniFaces中的原因。

如果您仍在使用Mojarra,请随时使用。但是,我强烈建议在同一页面上使用所有可能的用例对它进行彻底的测试。Mojarra具有一些与状态保存有关的怪癖,这些怪癖在使用此构造时
可能会 失败。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/399757.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号