gpt4 book ai didi

jsf - 为什么我的 p :progressBar not displayed, 只有数字?

转载 作者:行者123 更新时间:2023-12-02 17:35:11 26 4
gpt4 key购买 nike

我有以下带有进度条的 XHTML 文件:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:pm="http://primefaces.org/mobile">

<f:view renderKitId="PRIMEFACES_MOBILE"/>
<h:head></h:head>
<f:event listener="#{mainOp.init}" type="preRenderView" />

<h:body id="body">
<pm:page id="page">
<pm:header title="MyProduct">
</pm:header>

<pm:content id="content">
<p:outputLabel value="..."/>
<p:graphicImage id="image" rendered="true"
value="..."
cache="false"/>
<p:progressBar id="progressBar"
value="#{mainOp.progress}"
rendered="true"
cache="false"
labelTemplate="{value}%"
style="width:400px; font-size:12px"
interval="100"/>
...
</pm:content>

<pm:footer title="m.MyProduct.info"></pm:footer>
</pm:page>
</h:body>
</html>

在相应的 bean 中,我将进度属性设置为 21。

@ManagedBean(name = MainOpView.NAME)
@SessionScoped
public class MainOpView {
public static final String NAME = "mainOp";
[...]

private Integer progress = 0;

public void init()
{
[...]

progress = 21;
}

public Integer getProgress() {
return progress;
}

public void setProgress(final Integer aProgress) {
progress = aProgress;
}
}

呈现页面时,我可以看到 21 % 字样,但看不到进度条本身。

Screenshot

如何修复它(使进度条可见)?

更新 1 (27.12.2014 13:43 MSK):我正在使用 Primefaces 5.1。

    <dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>5.1</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.1.11</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.1.11</version>
</dependency>

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>

<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
</dependency>

最佳答案

问题是双重的。

第一个问题是 primefaces:primefaces-mobile.js 中的错误它在浏览器的 JS 控制台中公开如下(注意应该是我删除了 <p:graphicImage> 以减少噪音):

enter image description here

看来 <p:progressBar>脚本默认不包含在 PrimeFaces 移动 CSS/JS 中,因此需要单独加载。但是,内联 PrimeFaces.cw(...)在生成的 HTML 输出中调用,它负责,似乎缺少应该代表 CSS/JS 资源名称的第 4 个参数。请参阅生成的 HTML 输出中的以下摘录(格式化我的):

<script id="page:progressBar_s" type="text/javascript">
$(function() {
PrimeFaces.cw(
"ProgressBar",
"widget_page_progressBar",
{ id: "page:progressBar", widgetVar: "widget_page_progressBar", initialValue: 21, ajax: false, labelTemplate: "{value}%" }
);
});
</script>

这会导致 CSS/JS 资源名称以 undefined 结束。 :

GET http://localhost:8088/playground/javax.faces.resource/undefined/undefined.js.xhtml?ln=primefaces&v=5.1
GET http://localhost:8088/playground/javax.faces.resource/undefined/undefined.css.xhtml?ln=primefaces&v=5.1

这显然是 PrimeFaces 移动版中的一个错误。你最好的选择是 report这个问题交给 PF 伙计们。

与此同时,您可以通过内联或通过自定义脚本文件在头部结尾或主体开头执行此脚本来解决此问题:

var originalPrimeFacesCw = PrimeFaces.cw;
PrimeFaces.cw = function(name, id, options, resource) {
resource = resource || name.toLowerCase();
originalPrimeFacesCw.apply(this, [name, id, options, resource]);
};

当没有定义 CSS/JS 资源名称时,这基本上默认为小部件名称的小写版本。现在进度计数显示为粗体,并且该计数前面有一个空格:

enter image description here

这给我们带来了第二个问题。 .ui-progressbar .ui-widget-beader CSS 缺少 CSS 中的背景颜色。在标准(非移动)PrimeFaces 上,这是在主题特定的 CSS 文件中定义的,例如 primefaces-aritso:theme.css .对于移动 PrimeFaces,这种风格因此在 primefaces:primefaces-mobile.css 中是预期的。 , 但是它只包含 <p:panel>风格。

我不确定这是 PrimeFaces 移动版中的错误还是疏忽。同样在这里,你最好的选择是 report这个问题交给 PF 伙计们。

与此同时,您可以通过内联或通过自定义 CSS 文件在头部末尾添加以下 CSS 来设置样式:

.ui-progressbar .ui-widget-header {
background-color: pink;
}

enter image description here

您可能只想添加一个小边框作为画龙点睛的一笔。

关于jsf - 为什么我的 p :progressBar not displayed, 只有数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27645923/

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