primefaces 相关问题

PrimeFaces是一个JSF(Java Server Faces)组件库,附带了大量丰富的组件,这些组件利用了jQuery和jQuery UI。它支持jQuery UI ThemeRoller CSS框架和FontAwesome图标集。请注意,此标签不应与[PrimeNG]结合使用。

无法覆盖 primefaces 资源的默认缓存控制

我正在 Jakarta EE、Primefaces 12 和 OpenLiberty 中开发一个应用程序。当我加载应用程序时,primefaces资源(js和css文件),主要包含URL“jakarta.faces.resou...

回答 1 投票 0

PrimeFaces 13.0 在浏览器会话开始时显示“无效请求”

当我们通过浏览器(Chrome 版本 116.0.5845.141)访问我们的应用程序时,打开浏览器后,第一次尝试总是会重定向到仅显示消息“Inva...

回答 1 投票 0

重新排序 p: p:dataTable 包含输入的行

有一列中有 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 的第一个解决方案配合良好)

回答 4 投票 0

PrimeFaces 多个数据表和行选择事件

我有一个动态数据表列表,我需要为每个表的单行启用行选择。 下面的代码仅在用户选择最后一个数据表的一行时才有效,也许是因为...

回答 1 投票 0

如何在浏览器上永久保存某些值?

我有一些登录信息;假设用户名、登录电子邮件和位置。 即使用户注销并关闭窗口后,我也希望将此信息保留在浏览器中。 当用户回来时

回答 2 投票 0

JakartaSever Faces 应用程序设置失败,并出现 java.lang.ClassNotFoundException:com.sun.faces.util.Util

我正在建立一个使用 Jakarta 的全新 JavaServer Faces 项目。我将此作为指导,虽然我理解堆栈跟踪的问题,但我无法理解为什么......

回答 2 投票 0

jsf、primefaces 应用程序的内容安全策略标头

由于 JSF 和 Primefaces 组件会产生内联脚本,因此很难以最佳配置配置 CSP 标头。 由于 JSF 在设计上提供了 XSS 保护,所以可以不使用吗...

回答 2 投票 0

Login.xhtml 提交会引发内容安全策略 javax.facse.FacesException:缺少 CSP 随机数

环境: 野蝇22 JSF 2.3 爪哇11 带 CSP 的 Primefaces 10 在 web.xml 上激活的内容安全策略会引发 javax.faces.FacesException:缺少 CSP 随机数 登录网页加载良好,但是当我

回答 3 投票 0

Primefaces 文件下载不起作用?

尝试进行简单的文件下载工作,但我得到的只是一个悬挂的 AJAX 状态栏,仅此而已。我的支持 bean 输出在准备和下载时呈现正确的名称。 我在做吗

回答 4 投票 0

在用 PrimeFaces 填充 inputText 后如何从 ComboBox 中选择一个项目?

我有一个“注册”页面,用户在其中填写一些信息,包括一些银行帐户信息。 用户可以通过两种方式选择银行(并从该银行加载信息): 他可以选择...

回答 1 投票 0

PrimeFaces ui-state-error 未添加到 Mojarra 4.0.3 的复合组件中

虽然我向对话框中的输入文本添加了必需的属性,但它没有添加 ui-state-error。我在 PrimeFaces 12 和 PrimeFaces 13 之前没有遇到这样的问题。我应该如何遵循有关

回答 1 投票 0

Primefaces 13.0.0 ui-state-error 未添加到对话框中

虽然我向对话框中的输入文本添加了必需的属性,但它没有添加 ui-state-error。我在 PrimeFaces 12 和 PrimeFaces 13 之前没有遇到这样的问题。我应该如何遵循有关

回答 1 投票 0

PrimeFaces 组件中的变量更新问题

我有一个在数据表中加载信息的commandLink,逻辑是当变量showPopup为true时,它会显示一个弹出窗口,否则不显示它。变量发生变化

回答 1 投票 0

p:数据表选择为空

我正在尝试使用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>

回答 3 投票 0

单击列表项时加载不同的 jsf 页面

我是 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)

回答 2 投票 0

如何添加监听器到p:fileUpload中的Choose按钮

是否可以为FileUpload组件中的“选择”按钮添加监听器? 我在高级模式下使用 p:fileUpload 。 我浏览了文档,它只支持 fileUploadListener

回答 3 投票 0

Primefaces 与 Springboot/JoinFaces 集成时出错

我正在尝试创建一个将 primefaces 与 spring boot 集成的应用程序,遵循以下教程: https://medium.com/@tsepomaleka/integrating-spring-boot-with-java-server-faces-using-join...

回答 2 投票 0

jQuery UI 图标精灵在 <p:column selectionMode="multiple">

我有一个 和 。 我有一个 <p:dataTable> 和 <p:column selectionMode="multiple">。 <p:dataTable id="someAppDto" var="someAppDto" widgetVar="someAppDtoWV" value="#{someBean.requestedApplList}" style="width:96%" rows="100" paginator="true" scrollable="true" scrollHeight="300" selection="#{someBean.dvoList}" rowSelectMode="checkbox" rowKey="#{someAppDto.m_nDVOId}" paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" filteredValue="#{someBean.requestedApplListFltr}" rowsPerPageTemplate="10,50,100" resizableColumns="true" liveResize="true"> ... <p:column selectionMode="multiple" style="width:10px;"/> ... </p:dataTable> 相同的代码自过去 10 年以来一直运行,没有出现任何问题。然而,自过去 3-4 周以来,我们在复选框中看到了这些奇怪的图标。它不会影响任何功能,只会造成混乱。所以我们的最终用户想要修复它。 选中复选框后,奇怪的字符就消失了。但是当取消选中时,它会再次出现。我尝试为此创建一个 jsfiddle,但无法重现。因此,在 chrome 浏览器中发布 Inspect Element 的屏幕截图。 是的,我确实删除了浏览器缓存并尝试过,但没有成功。 我在某种程度上同意你们关于浏览器升级的看法。但我想知道为什么 Edge 和 Chrome 浏览器都会出现这种情况???过去 4-5 个月以来没有部署任何代码。无论代码发生什么变化,都是在 4-5 个月之前发生的,与此无关。 好的,现在这就是我所做的,它正在我的本地工作。我还没有在 Dev/UAT 中部署。 .ui-chkbox .ui-chkbox-box{ height: 12px; width: 12px; background: #ffffff none !important; text-shadow : none; box-shadow: none; -moz-box-shadow: none; -webkit-box-shadow: none; } 之后: .ui-chkbox .ui-chkbox-box{ height: 13px; width: 13px; background: #ffffff none !important; text-shadow : none; box-shadow: none; -moz-box-shadow: none; -webkit-box-shadow: none; } 仅将高度和宽度从 12px 更改为 13px。 仅供参考:上面的 CSS 代码位于我们的全局 .css 文件中 我知道这不是一个好的解决方案,但就目前而言,它正在发挥作用,用户也很满意。我仍然会寻找更好的解决方案

回答 1 投票 0

Primefaces 5.2 - p:selectManyCheckbox 渲染不必要的图标

我们已经使用这个应用程序很多年了。但突然就出现了这个问题。复选框突然出现这些不需要的图标。不知道出了什么问题。这个问题出现在所有DEV/UAT/

回答 1 投票 0

托管bean为空的问题,但系统无法工作

我有一个带有 JSF 和 PrimeFaces 的 Java EE Web 应用程序。一切正常,但我在特定页面上遇到错误,指出托管 bean 为空,好像无法注入...

回答 0 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.