【发布时间】:2016-10-26 09:20:59
【问题描述】:
我正在使用 JSF 2.2、PF 5.3 和 GlassFish 4.1.1。
我正在尝试将 blockUI 内容集中在我的 Web 应用程序中。 这里是我的自定义 blockUI 的代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:cc="http://xmlns.jcp.org/jsf/composite"
xmlns:p="http://primefaces.org/ui">
<cc:interface>
<cc:attribute name="block" type="java.lang.String"/>
<cc:attribute name="trigger" type="java.lang.String"/>
</cc:interface>
<cc:implementation>
<p:blockUI block="#{cc.attrs.block}" trigger="#{cc.attrs.trigger}">
LOADING<br />
<p:graphicImage library="images" name="ajax-loader.gif"/>
</p:blockUI>
</cc:implementation>
这里是我尝试应用的代码
<h:form>
...
...
<p:dataTable id="myTable">
<p:column headerText="actions">
<p:commandButton class="triggerableFromBlockUI" action="#{action1}"/>
<p:commandButton class="triggerableFromBlockUI" action="#{action2}"/>
</p:column>
</p:dataTable>
...
...
<myTag:blockUI block="myTable" trigger="@(.triggerableFromBlockUI)"/>
</h:form>
但我看到以下错误
Cannot find component for expression "myTable".
如果我直接使用 p:blockUI 一切正常。你能帮帮我吗?
【问题讨论】:
-
我能问一下为什么你到处都在使用 cc 吗?为什么不把你的块放在一个片段中,然后把 ui:include 放在通用布局中呢? - 不要误会我的意思,复合组件很棒,但如果您只是自动包含在布局中一次,则不确定为什么在这种情况下需要它。如果您手动放置在多个页面上,CC 通常是。
-
我想我们还需要查看您的文件夹结构/文件名等。请提供
-
嗨 VeenarM,你是真的,这是我的第一个想法。但我认为失去组件的中心化有点傻。例如用于重用标签的某些属性。目前我没有这个需求,但是如果我放置500个blockUI然后我需要对它们进行一些修改,我会浪费很多时间并且不是一个安全的操作(从人的角度来看视图),并且测试每个块UI都会非常复杂。
-
您好 VeenarM,我的文件夹结构符合标准。我的自定义标签有 src/main/webapp/pageContainingMyTag.xhtml 和 src/main/webapp/resources/customTags/blockUI.xhtml。页面里面的ns是xmlns:cvl="xmlns.jcp.org/jsf/composite/customTags"
-
我没有意识到您将块 ui 放在“特定组件”即数据表上。我只见过/使用阻止 ui 来阻止整个页面,而某些事情正在发生/等待响应。 - 你是否考虑了你的资源中的额外层?即customTags/blockUi
标签: jsf jsf-2 primefaces composite-component