PrimeFaces是一个JSF(Java Server Faces)组件库,附带了大量丰富的组件,这些组件利用了jQuery和jQuery UI。它支持jQuery UI ThemeRoller CSS框架和FontAwesome图标集。请注意,此标签不应与[PrimeNG]结合使用。
使用组件文件导出 csv 当数据包含逗号时,primefaces 下载会产生逗号分隔符问题
我有以下问题。我正在使用 Primefaces、JSF 和 Java。我正在尝试生成一个包含数据库数据的 csv 文件,并使用 primefa 的 p:fileDownload 组件将其导出...
我正在领导我们的项目团队从 PrimeFaces 6 迁移到 PrimeFaces 13,它看起来就像用户放大得太近时出现的正常垂直滚动条,不再出现。 ...
更新到 JSF 2.3 后 MultiViewHandler 中出现空指针
PrimeFaces 12 JSF 2.3.14 EAP 7.4.9 你好, 将应用程序从 2.1.19 更新到 JSF 2.3.14(JBoss EAP 7.4 的主要版本)后,我得到了 Nullpointer。 09:14:54,346 引起:java.lang。
我正在 Jakarta EE、Primefaces 12 和 OpenLiberty 中开发一个应用程序。当我加载应用程序时,primefaces资源(js和css文件),主要包含URL“jakarta.faces.resou...
PrimeFaces 13.0 在浏览器会话开始时显示“无效请求”
当我们通过浏览器(Chrome 版本 116.0.5845.141)访问我们的应用程序时,打开浏览器后,第一次尝试总是会重定向到仅显示消息“Inva...
有一列中有 p:dataTable 和 p:inputText: 一栏中有 p:dataTable 和 p:inputText: <h:form id="form"> <p:dataTable id="dataTable" value="#{rowReorder.dataList}" var="row" draggableRows="true" rowKey="#{row.id}"> <p:ajax event="rowReorder" listener="#{rowReorder.reorder}" update="dataTable"/> <p:column> <f:facet name="header"> <p:commandButton value="Add" actionListener="#{rowReorder.addData}" update="dataTable" process="dataTable"/> </f:facet> <p:outputLabel value="#{row.id}"/> </p:column> <p:column> <p:inputText value="#{row.name}"/> </p:column> </p:dataTable> </h:form> 支撑豆: import org.omnifaces.cdi.ViewScoped; import org.primefaces.event.ReorderEvent; import javax.inject.Named; import java.io.Serializable; import java.util.LinkedList; import java.util.List; @Named("rowReorder") @ViewScoped public class RowReorder implements Serializable { private List<Data> dataList = new LinkedList<>(); public void addData() { Data data = new Data(); data.setId(dataList.size() + 1); data.setName("Data " + data.getId()); dataList.add(data); } public void reorder(ReorderEvent event) { } /** * Getters, Setters */ public List<Data> getDataList() { return dataList; } } 数据类: public class Data implements Serializable { private Integer id; private String name; /** * Getters, Setters */ } 重新排序前的示例数据表: -------------- |id | name | -------------- | 1 | Data 1 | | 2 | Data 2 | | 3 | Data 3 | | 4 | Data 4 | -------------- 重新排序后(将第一行移动到第三行): -------------- |id | name | -------------- | 2 | Data 1 | | 3 | Data 2 | | 1 | Data 3 | | 4 | Data 4 | -------------- 我知道发生这种情况是因为在 p:inputText 阶段设置来自 UPDATE_MODEL 的数据。我尝试通过在 process="@none" 组件中指定 p:ajax 来阻止处理输入字段,但它不起作用。您知道如何与 draggableRows 和 p:inputText 交朋友吗? 第一个解决方案 我找到了解决办法! 它不处理具有属性的输入(实际上根本不提交)process="@none" partialSubmit="true" 完整的 p:ajax 组件看起来像 <p:ajax event="rowReorder" listener="#{rowReorder.reorder}" update="dataTable" process="@none" partialSubmit="true"/> 第二种方案(如果需要提交数据) 理论: 让我们看看拖动行时发生了什么? 我们有ajax请求强制process="form:dataTable"。在 APPLY_REQUEST_VALUES 阶段,DataTableRenderer 尝试调用 DraggableRowsFeature 的解码,进而旋转列表元素(指定为 dataTable 的 value 属性的列表)。因此,在 UPDATE_MODEL_VALUES 阶段,我们有一个旋转列表和输入组件,它们想要将它们的值提交到 name 对象的 Data 字段。但请求参数在输入 id 中仍然包含旧的行索引:它们是 form:dataTable:1:name = Data 2、form:dataTable:2:name = Data 3、form:dataTable:0:name = Data 1(我添加了 3 行,并将第一行移至最后一行)。所以在这里我们得到了我们得到的。这样,如果我们需要在正确的位置提交数据,我们必须在 UPDATE_MODEL_VALUES 完成之前防止列表旋转, 并稍后在 INVOKE_APPLICATION 阶段执行此轮换,并在该 ajax 请求上呈现 dataTable: 在 DraggableRowsFeature.decode() 中我们可以看到 Collections.rotate() 仅当 value 是 List 的实例时才会被调用。 if (value instanceof List) { List list = (List) value; if(toIndex >= fromIndex) { Collections.rotate(list.subList(fromIndex, toIndex + 1), -1); } else { Collections.rotate(list.subList(toIndex, fromIndex + 1), 1); } } else { LOGGER.info("Row reordering is only available for list backed datatables, use rowReorder ajax behavior with listener for manual handling of model update."); } 还有DraggableRowsFeature.shouldDecode()方法。 public boolean shouldDecode(FacesContext context, DataTable table) { return context.getExternalContext().getRequestParameterMap().containsKey(table.getClientId(context) + "_rowreorder"); } 所以这里我们有两种可能性来防止数据源旋转: 不要使用 List 作为数据表值 创建自己的 org.primefaces.component.datatable.feature.DraggableRowsFeature 在 shouldDecode() 方法中返回 false。 练习: 我像这样修改了bean文件: @Named("rowReorder") @ViewScoped public class RowReorder implements Serializable { private static final Logger log = LoggerFactory.getLogger(RowReorder.class); private Set<Data> dataList = new LinkedHashSet<>(); public void addData() { Data data = new Data(); data.setId(dataList.size() + 1); data.setName("Data " + data.getId()); dataList.add(data); log.warn("{} {}", Integer.toHexString(data.hashCode()), data.getId()); } public void removeData(Data data) { dataList.remove(data); } public void reorder(ReorderEvent event) { List<Data> list = new LinkedList<>(dataList); int fromIndex = event.getFromIndex(); int toIndex = event.getToIndex(); if(toIndex >= fromIndex) { Collections.rotate(list.subList(fromIndex, toIndex + 1), -1); } else { Collections.rotate(list.subList(toIndex, fromIndex + 1), 1); } dataList.clear(); dataList.addAll(list); } /** * Getters, Setters */ public Set<Data> getDataList() { return dataList; } } 现在它首先将值提交到模型并在 INVOKE_APPLICATION 阶段旋转列表。 秘密是你的数据表的属性rowStatePreserved,添加它: rowStatePreserved =“true” <p:dataTable id="dataTable" value="#{rowReorder.dataList}" var="row" draggableRows="true" rowKey="#{row.id}" rowStatePreserved="true"> 并将此代码保留为: <p:ajax event="rowReorder" listener="#{rowReorder.reorder}" update="dataTable" process="@this"/> 在我的例子中,我在数据表列中使用了一个组合框,并且在添加此属性后,当我使用draggableRows函数时,该值不会将超过一行更改为另一行。 我等着帮你。 其他简单的解决方案是在 rowReorder 开始时禁用输入: <p:ajax event="rowReorder" onstart="$(':input', PrimeFaces.escapeClientId('#{component.clientId}')).prop('disabled',true)" update="@this"/> 注意#{component.clientId}将返回数据表的客户端ID。 为了避免丢失数据,您可以 Ajaxify 输入: <p:column headerText="#{msg.value}"> <p:inputText value="#{item.value}"> <p:ajax/> </p:inputText> </p:column> 我在使用 Primefaces 12 时遇到了同样的问题。 可悲的是,上面的解决方案对我不起作用,所以我必须寻找另一个选择: Primefaces 12 在 p:datatable 元素上提供了属性draggableRowsFunction。 如果设置,antonu17 在他的第二个解决方案中描述的默认行为将被禁用。 (参见 org.primefaces.component.datatable.feature.DraggableRowsFeature.decode(...)) 这意味着提交正常处理,包括 UPDATE_MODEL_VALUES-Phase 中的正确模型更新。之后,您可以使用 ajax 事件“rowReorder”和侦听器方法来获取带有 from/to 索引的 ReorderEvent-Object 并自行移动列表中的顺序。 这对我有用。 (Primefaces 7 与 antonu17 的第一个解决方案配合良好)
我有一个动态数据表列表,我需要为每个表的单行启用行选择。 下面的代码仅在用户选择最后一个数据表的一行时才有效,也许是因为...
我有一些登录信息;假设用户名、登录电子邮件和位置。 即使用户注销并关闭窗口后,我也希望将此信息保留在浏览器中。 当用户回来时
JakartaSever Faces 应用程序设置失败,并出现 java.lang.ClassNotFoundException:com.sun.faces.util.Util
我正在建立一个使用 Jakarta 的全新 JavaServer Faces 项目。我将此作为指导,虽然我理解堆栈跟踪的问题,但我无法理解为什么......
由于 JSF 和 Primefaces 组件会产生内联脚本,因此很难以最佳配置配置 CSP 标头。 由于 JSF 在设计上提供了 XSS 保护,所以可以不使用吗...
Login.xhtml 提交会引发内容安全策略 javax.facse.FacesException:缺少 CSP 随机数
环境: 野蝇22 JSF 2.3 爪哇11 带 CSP 的 Primefaces 10 在 web.xml 上激活的内容安全策略会引发 javax.faces.FacesException:缺少 CSP 随机数 登录网页加载良好,但是当我
尝试进行简单的文件下载工作,但我得到的只是一个悬挂的 AJAX 状态栏,仅此而已。我的支持 bean 输出在准备和下载时呈现正确的名称。 我在做吗
在用 PrimeFaces 填充 inputText 后如何从 ComboBox 中选择一个项目?
我有一个“注册”页面,用户在其中填写一些信息,包括一些银行帐户信息。 用户可以通过两种方式选择银行(并从该银行加载信息): 他可以选择...
PrimeFaces ui-state-error 未添加到 Mojarra 4.0.3 的复合组件中
虽然我向对话框中的输入文本添加了必需的属性,但它没有添加 ui-state-error。我在 PrimeFaces 12 和 PrimeFaces 13 之前没有遇到这样的问题。我应该如何遵循有关
Primefaces 13.0.0 ui-state-error 未添加到对话框中
虽然我向对话框中的输入文本添加了必需的属性,但它没有添加 ui-state-error。我在 PrimeFaces 12 和 PrimeFaces 13 之前没有遇到这样的问题。我应该如何遵循有关
我有一个在数据表中加载信息的commandLink,逻辑是当变量showPopup为true时,它会显示一个弹出窗口,否则不显示它。变量发生变化
我正在尝试使用primefaces 4.0的可选数据表,但所选对象始终为空。 我已经厌倦了像这里和这里所说的那样添加 rowKey,但仍然为空...... 这是我的页面: 我正在尝试使用 primefaces 4.0 的可选数据表,但所选对象始终为空。 我已经厌倦了像here和here所说的那样添加rowKey,但仍然为空... 这是我的页面: <p:dataTable id="appDetailTable" var="appDetail" value="#{newAppraiseBean.appDetailDataModel}" paginator="true" rows="5" paginatorPosition="bottom" selection="#{newAppraiseBean.selectedAppDetail}" rowKey="#{appDetail.appraiseDetailID}" selectionMode="single"> <p:ajax event="rowSelect" listener="#{newAppraiseBean.modifyAppDetail()}" oncomplete="newAppDlg.show();" update=":newAppraiseForm:newAppDetail"/> </p:dataTable> 在我的支持豆中: newAppraiseBean.modifyAppDetail():(只需打印所选项目) public void modifyAppDetail(){ System.out.println("modify, selectedAppDetail:"+selectedAppDetail); } 数据模型: private class AppraiseDetailDataModel extends ListDataModel<Appraisedetail> implements SelectableDataModel<Appraisedetail> { public AppraiseDetailDataModel(List<Appraisedetail> list) { super(list); } @Override public Object getRowKey(Appraisedetail t) { return t.getAppraiseDetailID(); } @Override public Appraisedetail getRowData(String string) { List<Appraisedetail> appList=(List<Appraisedetail>) getWrappedData(); for(Appraisedetail app:appList){ System.out.println(app.getAppraiseDetailID()); if(app.getAppraiseDetailID()==Integer.parseInt(string)){ return app; } } return null; } } 它总是打印 null,我不知道我错过了什么。 更新 我简化了我的代码并将其放在google Drive上。 这是netbean项目的压缩包,解压后可以直接用netbean打开。 当然,在我简化代码后问题仍然存在。 我仔细检查代码后解决了问题。 我发现我没有指定appraiseDetailID,也就是rowKey。 我没有指定它,因为我希望数据库在数据插入数据库时生成id。 而 getRowKey 方法总是获取 null,因为数据还没有插入到 DB,当然 id 还没有生成。 随后,primefaces 在想要 getObject 且 rowKey 为“null”时什么也得不到。 所以,在我自己指定 id 后,一切正常! 对于遇到同样问题的人,记得指定rowKey,以便你可以使用可选择的数据表。 试试这个: if(app.getAppraiseDetailID().toString().equals(rowkey)) { ... 而不是你拥有的。 AppraiseDetailDataModel 还必须实现可序列化。同时删除“()”: listener="#{newAppraiseBean.modifyAppDetail()}" 最后,确保监听器的方法签名为: public void modifyAppDetail(SelectEvent event) 您可以在该方法中设置断点并检查 event.getObject(),它应该引用所选行。 尽管我已经正确识别了对象列表,但我正在处理同样的问题。就我而言,我忘记将 dataTable 包裹在 form 中。 <h:form> <p:dataTable> ... </p:dataTable> </h:form>
我是 JSF 新手。我有一个无序列表和一个 div。 测试页 我是 JSF 新手。我有一个无序列表和一个 div。 <ul class="nav navbar-nav"> <li><a href="#TestPage">Test Page</a></li> <li><a href="#">Item1</a></li> <li><a href="#">Item2</a></li> <li><a href="#">item3</a></li> </ul> <div id="content"></div> 现在单击列表项,我想使用 JSF 加载不同的 xhtml 页面。是否有可能实现这个用例?我正在使用 JSF 2.0 和 primefaces。 只需将纯 HTML 链接替换为 JSF h:link。根据文档: 渲染 HTML“a”锚元素。组件的值呈现为锚文本,组件的结果用于确定“href”属性中呈现的目标 URL。 <li><h:link outcome="TestPage" value="Test Page" /></li> 其中 outcome 属性指定目标导航情况。 另请参阅: JSF 2 中的隐式导航 请注意,这对于使用 JSF 导航案例很有用。如果您只想对外部非 JSF url 执行 GET 请求,只需使用纯 HTML 方式即可。 在 click 元素的 <li> 事件上,您可以调用 $('#content').load(Url, successEventHandler)
如何添加监听器到p:fileUpload中的Choose按钮
是否可以为FileUpload组件中的“选择”按钮添加监听器? 我在高级模式下使用 p:fileUpload 。 我浏览了文档,它只支持 fileUploadListener
Primefaces 与 Springboot/JoinFaces 集成时出错
我正在尝试创建一个将 primefaces 与 spring boot 集成的应用程序,遵循以下教程: https://medium.com/@tsepomaleka/integrating-spring-boot-with-java-server-faces-using-join...