当前位置: 首页 > 知识库问答 >
问题:

PrimeFaces SelectOneMenu ajax渲染

漆雕彬彬
2023-03-14

我的程序出了什么问题?我觉得一切都很好。我的方法获取所选值“REFERENCE”,并将布尔值设置为showReference。但是,如果我在p:ajax中使用update=“targetPanel”,我的页面无法呈现。当我使用update=“entryForm”时,它可以渲染h:panelGroup。

我错过了什么?

我的页面。xhtml

<h:form id="entryForm">
        <p:selectOneMenu value="#{MyBean.keyFactorValue}" required="true" style="width:257px;" id="keyFactorValue">
            <f:selectItems value="#{MyBean.selectItemList}" var="type" itemLabel="#{type.label}" itemValue="#{type}"/>  
            <p:ajax listener="#{MyBean.changeKeyValue}" update="targetPanel" event="change"/>
        </p:selectOneMenu>

        <h:panelGroup id="targetPanel" rendered="#{MyBean.showReference}">
            .......
        </h:panelGroup>

</h:form>

关键因子值。Java语言

public enum KeyFactorValue {
    REFERENCE("Reference"), FORM_TO("From-To"), FIXED("Fixed");

    private String label;

    private KeyFactorValue(String label) {
        this.label = label;
    }

    public String getLabel() {
        return label;
    }
}

我的豆子。Java语言

@Scope(ScopeType.CONVERSATION)
@Name("MyBean")
public class MyBean {
    private boolean showReference;

    public boolean isShowReference() {
        return showReference;
    }

    public KeyFactorValue[] getSelectItemList() {
        return KeyFactorValue.values();
    }

    public void changeKeyValue(AjaxBehaviorEvent e) {
        KeyFactorValue type = keyFactor.getKeyFactorValue();
        System.out.println("Selected KeyFactorValue : " + type);
        switch(type) {
            case REFERENCE :{
                showReference = true;
                break;
            }
            default :{
                showReference = false;
                break;
            }
        }
    }

}

共有1个答案

汝宏伯
2023-03-14

不能用ajax更新HTML中未由JSF呈现的元素。JavaScript(ajax背后的代码)无法通过文档找到它。getElementById(),以替换其内容。

您只能使用ajax更新HTML中的元素,该元素始终由JSF呈现。将有条件渲染的组件封装在另一个始终渲染的组件中,并由ajax更新它。

html prettyprint-override"><h:panelGroup id="targetPanel">
    <h:panelGroup rendered="#{MyBean.showReference}">
        ...
    </h:panelGroup>
</h:panelGroup>
  • 当我想用ajax更新组件时,为什么需要用rendered=#{some}将其嵌套在另一个组件中
 类似资料:
  • 图片

  • 在 Hexo 中,有两个方法可用于渲染文件或字符串,分别是非同步的 hexo.render.render 和同步的 hexo.render.renderSync,这两个方法的使用方式十分类似,因此以下仅以非同步的 hexo.render.render 为例。 渲染字符串 在渲染字符串时,您必须指定 engine,如此一来 Hexo 才知道该使用哪个渲染引擎来渲染。 hexo.render.rend

  • 6.1 渲染模板 一旦你拥有一个模版文件,你可以通过给一个map来给它传递数据。 map是一个变量及赋予的值的集合,模板使用它来得到变量的值,或者对于块标签求值。 它的渲染函数有一个可选的变量键值对map 通过 ctx.Render() 方法来渲染模板,例如: func (r *Render) Serve(ctx *faygo.Context) error { return ctx.Ren

  • 但thymeleaf无法呈现它,因为div标记未在其启动的中关闭。有没有办法把上面的jsp代码转换成thymeleaf。 我正在使用thymeleaf 2.0.17和spring3

  • 渲染 REST framework 包含许多内置的渲染器类,允许您使用各种 media type 返回响应。同时也支持自定义渲染器。 如何确定使用哪个渲染器 视图的渲染器集合始终被定义为类列表。当调用视图时,REST framework 将对请求内容进行分析,并确定最合适的渲染器以满足请求。内容分析的基本过程包括检查请求的 Accept header,以确定它在响应中期望的 media type。

  • 如果你调研服务器端渲染(SSR)只是用来改善少数营销页面(例如/,/about,/contact等)的 SEO,那么你可能需要预渲染。无需使用 web 服务器实时动态编译 HTML,而是使用预渲染方式,在构建时(build time)简单地生成针对特定路由的静态 HTML 文件。优点是设置预渲染更简单,并可以将你的前端作为一个完全静态的站点。 如果你使用 webpack,你可以使用prerende

  • 问题内容: 在我的Maven项目中,我创建了一个“ index.xhtml”文件。当我构建并运行该项目时,Web浏览器未显示任何内容。当我查看源代码时,仍然可以看到源代码,而不是普通的html标签。 我尝试通过以下方式创建XHTML文件: 选择项目,右键单击New ..并选择Other ..并选择“ Web”类别,然后选择JSF Page。 选择项目,右键单击New ..,然后选择Other ..

  • Blade 内部内置了一个非常简单的模板渲染引擎,如果你有一些简单的页面需要渲染可以试试它(生产环境不适用)。 渲染一个模板需要遵守一条准则: 所有的模板文件都存储在 resources/templates 目录下 你可以调用 Response 方法的 render 方法渲染或者返回一个 String 类型的视图路径。 @GetRoute("/index") public void renderI