PrimeFaces是一个JSF(Java Server Faces)组件库,附带了大量丰富的组件,这些组件利用了jQuery和jQuery UI。它支持jQuery UI ThemeRoller CSS框架和FontAwesome图标集。请注意,此标签不应与[PrimeNG]结合使用。
我可以使用ajax(存在于数据表中)从命令链接调用对话框。 要求-我单击的行(命令链接),对话框应显示单击的行的值。 问题 - f:
我希望 Primefaces DataTable 行中有一个按钮来显示一个对话框,其中显示有关该行中对象的更多信息。当我单击该行中而不是按钮中的任意位置时,该行将被选中。哈...
如何在 p:inputTextarea PrimeFaces 中停用拼写检查?
我想停用 PrimeFaces 输入文本区域中的拼写检查。 在 p:inputTextarea 中不可能拼写检查=“假” 我想停用 PrimeFaces 中的拼写检查 inputTextarea。 spellcheck="false" 在 p:inputTextarea 中是不可能的 <p:inputTextarea value="#{mybean.cardescription}" cols="95" autoResize="true" rows="20"/> 使用以下内容: <h:head> <h:outputScript name="/js/util/disableSpellCheck.js"/> </h:head> $('inputTextId').attr('spellcheck','false') 虽然我参加聚会已经很晚了,但我认为有一种更干净的方法可以不用 Javascript 来完成它。当您包含命名空间 xmlns:pt="http://xmlns.jcp.org/jsf/passthrough" 时,您将属性传递给生成的 HTML,因此您可以直接在 JSF 代码中设置该属性: <p:inputTextarea value="#{mybean.cardescription}" cols="95" pt:spellcheck="false" autoResize="true" rows="20"/> 这适用于其组件中没有相应 JSF 属性的所有 HTML 属性。 此处选择 pt 是为了避免与 PrimeFaces 发生命名空间冲突。您还经常会发现 p 表示直通属性。
如何在 p:inputTextarea Prime Faces 中停用拼写检查?
我想停用 Prime Faces 输入文本区域中的拼写检查。 在 p:inputTextarea 中不可能拼写检查=“假” 我想停用 Prime Faces 中的拼写检查 inputTextarea。 spellcheck="false" 在 p:inputTextarea 中是不可能的 <p:inputTextarea value="#{mybean.cardescription}" cols="95" autoResize="true" rows="20"/> 使用以下内容: <h:head> <h:outputScript name="/js/util/disableSpellCheck.js"/> </h:head> $('inputTextId').attr('spellcheck','false') 虽然我参加聚会已经很晚了,但我认为有一种更干净的方法可以不用 Javascript 来完成它。当您包含命名空间 xmlns:pt="http://xmlns.jcp.org/jsf/passthrough" 时,您将属性传递给生成的 HTML,因此您可以直接在 JSF 代码中设置该属性: <p:inputTextarea value="#{mybean.cardescription}" cols="95" pt:spellcheck="false" autoResize="true" rows="20"/> 这适用于其组件中没有相应 JSF 属性的所有 HTML 属性。 此处选择 pt 是为了避免与 PrimeFaces 发生命名空间冲突。您还经常会发现 p 表示直通属性。
我需要您的帮助来在对话框中显示错误消息。单击命令按钮后,对话框中不会显示任何消息。 尽管我尝试在对话框中显示该消息,但什么都没有......
需要一些帮助来选择页面加载时的 PrimeFaces p:dataTable 第一行,这是到目前为止我的代码: 需要一些帮助选择 PrimeFaces p:dataTable 页面加载时的第一行,这是到目前为止我的代码: <p:dataTable id="dtbList" value="#{Controller.items}" var="item" widgetVar="dataTableList" lazy="true" selection="#{Controller.selectedValue}" rowKey="#{item.key}" scrollable="true" scrollHeight="133"> <p:ajax event="rowSelectRadio" listener="#{Controller.handleSelectList}" update="dtbList" oncomplete="resetScroll();"/> ... ... ... </p:dataTable> 我尝试使用ajax事件没有成功 <p:ajax event="page" onsuccess="PF('dataTableList').selectRow(0);"/> 想知道我哪里做错了。 如果您知道第一行的 rowKey(id),请尝试在 dataTable 组件中添加属性 dynamic="true",如下所示: <p:dataTable id="dtbList" value="#{Controller.items}" var="item" widgetVar="dataTableList" lazy="true" selection="#{Controller.selectedValue}" rowKey="#{item.key}" scrollable="true" scrollHeight="133" dynamic="true"> ... ... ... </p:dataTable> 并且,在你的bean(控制器)中创建一个由@PostConstruct注释的方法,这样你就可以选择最好的元素。 像这样: @PostConstruct public void init() { this.selectedValue = new SelectedValueEntityType(); this.selectedValue.setKey('yourKey'); } page 事件是在分页时触发的,因此不会在初始加载时触发。 您可能希望使控制器成为您已实现的 LazyDataModel 的属性(假设您这样做了;如果您正在使用 JpaLazyDataModel,请扩展它)。现在您可以通过 load 方法访问控制器。现在,您可以简单地检查是否未进行选择,并将在 load 方法中获取的第一个项目设置为控制器的选定项目。 另请参阅:https://primefaces.github.io/primefaces/12_0_0/#/components/datatable 我之前也遇到过同样的问题。 首先,您需要以编程方式构建 datatable 组件。 例如,backbean 将类似于以下内容 public class Controller { private DataTable dataTable; private CustomLazyDataModel customLazyDataModel; @PostConstruct public void init() { ExpressionFactory exFactory = FacesContext.getCurrentInstance().getApplication().getExpressionFactory(); ELContext elContext = FacesContext.getCurrentInstance().getApplication().getELContext(); dataTable = new DataTable(); dataTable.setId("dtbList"); dataTable.setValueExpression("value", exFactory.createValueExpression(elContext,"#{Controller.customLazyDataModel}", CustomLazyDataModel.class)); // This for selecting first row. dataTable.setSelection(new YourPOJOClass[]{customLazyDataModel.getDatasource().get(0)}); } } 这是您的自定义惰性数据模型的示例 @Getter @Setter public class CustomLazyDataModel extends LazyDataModel<YourPOJOClass> { // the loaded data source private List<YourPOJOClass> datasource; @Getter(AccessLevel.NONE) @Setter(AccessLevel.NONE) private boolean buildScreenPhase = false; // use this initialization function to create an instance of lazy // data model public static CustomLazyDataModel forBuildScreen() { CustomLazyDataModel customLazyDataModel = new CustomLazyDataModel(); // pass needed data instead of null customLazyDataModel.load(0, 7, null, null, null); customLazyDataModel.buildScreenPhase = true; return customLazyDataModel; } @Override public List<RowModel> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) { // Your loading logic here from db or something else // to enhance loading data performance we will use // buildScreenPhase flag if (!buildScreenPhase) { // load data } else { buildScreenPhase = false; } } }
我有一个 p:autoComplete 组件,我想在其中显示基于所选项目的链接。为此,我在 p:autoComplete 的值发生更改时更新组件。其中一部分是有一个 p:ajax
我用于输入地址字段。默认情况下设置 active-index="-1",以便在加载页面时面板将关闭。用户输入详细信息后,我想要面板区域wh。 ..
我想我尝试了在其他答案中找到的所有内容。 我正在使用 liferay 和 spring-boot 微服务。我正在通过从微服务调用端点来拍摄图像,并尝试使用 l...
PrimeFaces ajax 不会将参数值传递给支持 bean
我正在研究拖放功能。我需要将 中的列内容移动到另一列,但不同的行。 (这有效)问题是,我需要传递值......
PrimeFaces:将选定的值传递给自动编译方法(请求范围)
我有一个目前不容易实现的要求。应根据 SelectOneMenu 选择在此处预先选择自动完成功能。为此,我需要之前的选择...
如何使用primefaces gMap实现Google地图绘制路线
我从 https://www.primefaces.org/showcase/ui/data/gmap/geocode.xhtml 实现了 gMap,它按预期工作,但我需要绘制从用户位置到地图上的点的路线。 ...
使用组件文件导出 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 的第一个解决方案配合良好)
我有一个动态数据表列表,我需要为每个表的单行启用行选择。 下面的代码仅在用户选择最后一个数据表的一行时才有效,也许是因为...