PrimeFaces是一个JSF(Java Server Faces)组件库,附带了大量丰富的组件,这些组件利用了jQuery和jQuery UI。它支持jQuery UI ThemeRoller CSS框架和FontAwesome图标集。请注意,此标签不应与[PrimeNG]结合使用。
我无法让Ajax事件开火并致电ActionListener或让第二个选择一个更新本身。我想念什么? 我无法让Ajax事件开火并致电ActionListener或让第二个选择一个更新本身。我想念什么? <p:selectOneMenu value="#{player}" converter="playerConverter" id="playerList"> <f:selectItem itemLabel="---" noSelectionOption="true" /> <f:selectItems value="#{servicePlayer.allPlayers}" var="n" itemValue="#{n}" itemLabel="#{n.combinedName}" itemLabelEscaped="true"/> <p:ajax event="change" execute="@this" actionListener="# {serviceHCP.getClubs(player) }" update="ClubMenu" /> </p:selectOneMenu> <h:outputText value="Klubb"></h:outputText> <!-- h:outputText value="#{ serviceHCP.myClubList.size()}" / --> <p:selectOneMenu id="ClubMenu" value="#{serviceHCP.myCurrentClub}" rendered="#{not empty serviceHCP.myClubList}" converter="clubConverter"> <f:selectItems value="#{serviceHCP.myClubList}" var="clb" itemValue="#{clb}" itemLabel="#{clb.name}" itemLabelEscaped="true"/> </p:selectOneMenu> <h:outputText value="Serietyp"></h:outputText> 非常愚蠢的失误 selectonemenu ajaxevents 不称为ActionListener,它称为侦听器。 wrong <p:ajax event="change" execute="@this" actionListener="#{serviceHCP.getClubs(player) }" update="ClubMenu" /> 纠正 <p:ajax event="change" execute="@this" listener="# {serviceHCP.getClubs(player) }" update="ClubMenu" /> JSF2没有“更新”属性,而应使用'Render'属性。 请请参见下面的参考: JSF2.2 javadoc f:ajax JSF2.1 f:ajax的Javadoc F:ajax的JSF 2.0 Javadoc https://www.beyondjava.net/a-comprehens-guide-guide-to-jsf-ajax
我有一个方案,如果我选中一个复选框,则应该不选中另一个。 我正在使用JSF。 我的代码: 我有一个方案,如果我选中一个复选框,则应不选中另一个。 我正在使用JSF. 我的代码: <p:dataTable> <p:column headerText="PAID"> <p:selectBooleanCheckbox value="#{bean.paid}" /> </p:column> <p:column headerText="NOT PAID"> <p:selectBooleanCheckbox value="#{bean.notPaid}"/> </p:column> </p:dataTable> 视图: 我怎么能实现这一目标! @mr.j4mes已经工作了。 我以相同的方法尝试,但使用了<p:selectBooleanCheckbox>。 代码 <p:column id="paid" headerText="Paid"> <p:selectBooleanCheckbox id="paidCheckBox" value="#{bean.paid}"> <p:ajax update="notPaidCheckBox" listener="#{bean.onPaidStatusChange}" /> </p:selectBooleanCheckbox> </p:column> <p:column id="notPaid" headerText="NotPaid"> <p:selectBooleanCheckbox id="notPaidCheckBox" value="#{bean.notPaid}"> <p:ajax update="paidCheckBox" listener="#{bean.onNotPaidStatusChange}" /> </p:selectBooleanCheckbox> </p:column> @ManagedBean(name="bean") @SessionScoped public class Bean { private boolean paid; private boolean notpaid; @PostConstruct public void Bean() { this.paid= true; } public void onPaidStatusChange() { if (paid) notpaid= false; } public void onNotPaidStatusChange() { if (notpaid) paid= false; } } 这很好。 Thanks for Mr.J4mes approach ;-) JSF2没有“更新”属性,而应使用'Render'属性。 请请参见下面的参考: JSF2.2 javadoc f:ajax JSF2.1 f:ajax的Javadoc F:ajax的JSF 2.0 Javadoc https://www.beyondjava.net/a-comprehens-guide-guide-to-jsf-ajax
如何将动态版本添加到primefaces主题URL以供缓存破坏?
我正在我的JSF应用程序中使用PrimeFaces 12,并具有自定义主题。该主题由PrimeFaces自动包含,其资源URL看起来像这样: <link type="text/css" rel="stylesheet" href="/GuiApp/jakarta.faces.resource/theme.css.xhtml?ln=primefaces-custom&v=12.0.0"> 问题是,当我更新主题的CSS时,使用者经常会看到旧的缓存版本,因为浏览器不会获取更新的文件。为了解决这个问题,我想在主题URL中添加一个动态版本号,例如v = 12.0.1,以便浏览器始终获取最新版本。 我尝试了什么: 1。 web.xml中添加了一个主题。 <context-param> <param-name>theme.version</param-name> <param-value>12.0.1</param-value> </context-param> 2。创建了一个自定义资源Handler将版本附加到URL: @Override public Resource createResource(String resourceName, String libraryName) { if ("primefaces-custom".equals(libraryName) && "theme.css".equals(resourceName)) { Resource resource = super.createResource(resourceName, libraryName); String version = FacesContext.getCurrentInstance() .getExternalContext() .getInitParameter("theme.version"); return new VersionedResource(resource, version); } return super.createResource(resourceName, libraryName); } 3。包裹资源以修改URL: @Override public String getRequestPath() { String path = wrapped.getRequestPath(); if (path.contains("?")) { path = path.replaceAll("[&?]v=[^&]*", ""); // Remove existing version } return path + (path.contains("?") ? "&" : "?") + "v=" + version; } 问题: 当我实施此功能时,主题URL已更新,但其中包含重复版本参数: <link type="text/css" rel="stylesheet" href="/GuiApp/jakarta.faces.resource/theme.css.xhtml?ln=primefaces-custom&v=12.0.0&v=12.0.1"> 部署后,我的应用程序破裂,一些资源停止了加载。 我需要什么: 如何在主题URL中正确添加动态版本(v)而不复制参数? 为PrimeFaces主题版本操作的正确方法覆盖了ResourceHandler,还是有更好的解决方案? 这里是我的分步解决方案: 在context-param中定义主题版本: 在您的web.xml中,定义Aweb.xml以指定要使用的主题版本。 context-param 创建自定义ViewHandler,以动态设置主题URL中的版本:NEXT,扩展默认的ViewHandler并覆盖Createresource方法。该方法将通过从Web.xml.中获取版本来动态设置主题的CSS URL的版本。 <context-param> <param-name>theme.version</param-name> <param-value>12.0.1</param-value> <!-- Update this version when you release a new one --> </context-param> 注册faces-config.xml中的自定义ViewHandler: public class CustomResourceHandler extends ViewHandler { private ViewHandler parent; public CustomResourceHandler(ViewHandler parent) { this.parent = parent; } // Method to get the theme version from web.xml private String getThemeVersion(FacesContext context) { String version = context.getExternalContext().getInitParameter("theme.version"); return (version != null) ? version : "1.0.0"; // Default version if not set } @Override public Resource createResource(String resourceName, String libraryName) { if ("primefaces-custom".equals(libraryName) && "theme.css".equals(resourceName)) { Resource resource = super.createResource(resourceName, libraryName); if (resource != null) { FacesContext context = FacesContext.getCurrentInstance(); String themeVersion = getThemeVersion(context); // Dynamically update the resource path with the version String newPath = resource.getRequestPath().replaceAll("&v=[0-9.]+", "&v=" + themeVersion); return new ResourceWrapper(resource) { @Override public String getRequestPath() { return newPath; } }; } } return super.createResource(resourceName, libraryName); } }
有p:p:dataTable p:p lince in a列中的inputText: 在列中使用p:dataTablep: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> 后bean: 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; } } data类: 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 | -------------- 重新排序后(将1-ST行移至3-RD): -------------- |id | name | -------------- | 2 | Data 1 | | 3 | Data 2 | | 1 | Data 3 | | 4 | Data 4 | -------------- 我知道它正在发生在p:inputText阶段中设置UPDATE_MODELprocess="@none"数据的原因。我试图通过在p:ajax组件中指定draggableRows来防止输入字段处理,但它不起作用。有什么想法如何结交朋友? 第一个解决方案 我找到了解决方案! 它没有使用属性p:inputText处理输入(并且实际上根本没有提交) 完成P:AJAX组件看起来像 process="@none" partialSubmit="true" 秒解决方案(如果需要提交的数据) theory: LETS查看Draging Row上发生了什么? 我们有AJAX请求强迫<p:ajax event="rowReorder" listener="#{rowReorder.reorder}" update="dataTable" process="@none" partialSubmit="true"/>。在apply_request_values阶段上,process="form:dataTable"尝试调用DataTableRenderer的解码,然后旋转列表元素(指定为DataTable的值属性的列表)。因此,在update_model_values阶段,我们有一个旋转的列表和输入组件,该列表希望将其值提交给对象的DraggableRowsFeature字段。但是请求参数仍然包含输入ID中的旧行索引:它们是name,Data,form:dataTable:1:name = Data 2(我添加了3行,并将第一行移至最后一个行)。因此,我们得到了我们得到的。这样,如果我们需要在正确的位置提交数据,我们必须防止列表在update_model_values完成之前旋转, 并在以后在Indoke_application阶段执行此旋转,并在AJAX请求上渲染数据列表: 在form:dataTable:2:name = Data 3中,我们可以看到form:dataTable:0:name = Data 1仅在值为列表实例时才调用。 DraggableRowsFeature.decode() 也有Collections.rotate()方法。 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."); } 在这里,我们有2种可能防止数据源旋转的可能性: 不要使用DraggableRowsFeature.shouldDecode()用作数据词值 创建自己的public boolean shouldDecode(FacesContext context, DataTable table) { return context.getExternalContext().getRequestParameterMap().containsKey(table.getClientId(context) + "_rowreorder"); } 在List方法中返回false。 实践: I修改了bean文件: org.primefaces.component.datatable.feature.DraggableRowsFeature 现在它首先将值提交给Invoke_application阶段的模型和旋转列表。 秘密是您数据表的属性shouldDecode(),添加它: rowStatePresved =“ true” @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; } } 保持此代码如下: rowStatePreserved 在我的情况下,我被使用了一个combobox到数据表列中,当我使用draggablerows function时,添加了此tribute后,值不超过一行。 我等待帮助您。 我使用PrimeFaces遇到了同样的问题12. 上面的解决方案对我不起作用,因此我找到了另一个选择: PrimeFaces12在p:datatable元素上提供属性draggablerowsfunction。 如果设置,则禁用了Antonu17在其第二个解决方案中描述的默认行为。 (请参阅org.primefaces.component.datatable.feature.draggablerowsfeature.decode(...)) 这意味着提交是正常处理的,包括update_model_values-phase中的正确模型更新。之后,您可以使用侦听器方法使用Ajax事件“ Rowreorder”,以将重新验证对象从/到索引并自行移动列表中的顺序。 为我工作。 (PrimeFaces 7与Antonu17的第一个溶液效果很好) 其他简单解决方案是在 <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"/> 注意rowReorder将返回数据表的客户端ID。 为了避免丢失数据,您可以删除输入: <p:ajax event="rowReorder" onstart="$(':input', PrimeFaces.escapeClientId('#{component.clientId}')).prop('disabled',true)" update="@this"/> 最终已用PrimeFaces 14.0.12+(Https://github.com/primefaces/primefaces/issues/13310)解决了问题。 对于(可选)重新排序AJAX事件,这已经足够了: #{component.clientId}现在不需要更多的解决方法...
如何在PrimeFaces中导出的XLSX文件中显示列的标题名称
我尝试将我的表从priperfaces(像这样的代码)导出到XLXS文件中: 按钮: 我尝试将我的表从primefaces带到dataTable的XLXS文件,如以下代码: 按钮: <p:commandButton styleClass="ui-button-outlined" ajax="false" value="Export" style="margin-right: 10px"> <p:dataExporter target="aktiva passiva" exportHeader="true" type="xls" fileName="neraca(#{libsDateTime.timeNowStr()})" /> </p:commandButton> the桌子: <p:dataTable rendered="false" id="passiva" value="#{tabunganTransaksiBean.getNeracaPassiva(tabunganTransaksiBean.tampilan, UserObj.id_kantor)}" var="ledger"> <p:column exportHeaderValue="true" headerText="coa"> <h:outputText value="#{ledger.coa}"/> </p:column> <p:column exportHeaderValue="true" headerText="nama"> <h:outputText value="#{ledger.nama_coa}"/> </p:column> <p:column exportHeaderValue="true" headerText="nominal"> <h:outputText value="#{libsRendering.minusSign(ledger.balance)}"> <f:convertNumber pattern="#,###,##0.00"/> </h:outputText> </p:column> <p:column exportHeaderValue="true" headerText="jenis"> <h:outputText value="#{ledger.jenis}"/> </p:column> </p:dataTable> 我在导出按钮上有Add exportheader,桌子上的ExportheDervalue,但结果是标题名称而不是显示 我想在导出的文件xlxs.上添加标题名称。 small提示:ExportheDervalue是出口中显示的标题(文本),而不是布尔旗。
Primefaces InputText 验证失败后不起作用
我有一个表格,每一行都有一个删除按钮。单击删除按钮后,应出现一个确认对话框。在这个对话框中,只有一个必填的输入字段和一个取消和删除按钮...
primeface 3.5 数据表 rowSelectCheckbox ajax 事件在选择/勾选复选框时不会触发侦听器
大家好,向所有前辈致以问候, 我在这里遇到一些问题,我只需要在 primefaces 数据表事件 =“rowSelectCheckbox”中使用以下事件。当我执行此操作时会发生什么
我使用primefaces并且我一步步注册。如果注册成功结束,向导的步骤是第一步,但如果我继续新记录或用户,向导无法添加新记录。这是
我有一个数据表,在其中显示项目 - 每个项目一行。在一栏(人员)中,每个项目的负责人按其职能显示。 +----------------+--------------+------...
我有一个 p:dataTable,每个 RowEditor 都可以编辑。现在我想为每个单选按钮添加单个选择(因为通过简单地单击行进行的 rowSelection 不适用于 cellEditor)。 问题是
我正在使用 primefaces 3.2 和 JSF 2.0 我的情况是我的表单中有文件日期、最后日期和下一个日期。 当用户输入文件日期时,我需要更新 bean 中的文件日期值,因此它的值可以是...
我正在尝试通过ajax从我的日历中获取值。 xhtml部分: 显示=“按钮” 掩码=“真”
Primefaces 媒体组件无法使用 StreamedContent
我正在尝试使用版本 13.0.5 中的 Primefaces p:media 组件来显示从数据库加载的 PDF。 这是我的 BackingBean getter,它肯定会被调用并构建 StreamedCon...
Primfaces 媒体组件无法使用 StreamedContent
我正在尝试使用版本 13.0.5 中的 Primefaces p:media 组件来显示从数据库加载的 pdf。 这是我的 BackingBean getter,它肯定会被调用并构建 StreamedCont...
Java.util.Date 与 Java.sql.Date - 日期值不同
我有一个 Oracle 数据库,其中包含一个字段 W_PLANNED_DATE:19/03/2013 10:55:00(日期) 在 Java 中,我将此值放入变量中: 日期 dteBeginOrWaitingItem = orWaitinglist.getWPlannedDate();
我正在使用 PrimeFaces 11,我有一个场景,我必须将 dataTable 以表单形式导出到 Excel。我的 .xhtml 代码如下所示: 我正在使用 PrimeFaces 11,我有一个场景,我必须将 dataTable 以表单形式导出到 Excel。我的 .xhtml 代码如下所示: <p:commandButton id="cmdexcel" value="#{text.Excel}" icon="fa fa-file-excel-o" ajax="false" disabled="#{empty ledgerMB.lstLedger}"> <p:dataExporter type="xls" target="dataTblLedger" encoding="UTF-8" fileName="Ledger" postProcessor="#{ledgerMB.postProcessXLS}" /> </p:commandButton> <p:dataTable var="tblLedger" value="#{ledgerMB.lstLedger}" id="dataTblLedger" rowIndexVar="rowSn" paginator="true" rows="25" scrollable="true" scrollHeight="490" scrollWidth="98%" rowStyleClass="#{tblLedger.boldFlag ? 'bold-total':''}" paginatorTemplate="{FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" rowsPerPageTemplate="25,50,100,150,200" resizableColumns="true" emptyMessage="#{text.NoRecordFound}"> <p:column headerText="#{text.SNo}" width="50"> <h:outputText value="#{tblLedger.sno eq 0?' ':tblLedger.sno}" styleClass="np" /> </p:column> <p:column headerText="#{text.Date}" width="100"> <h:outputText value="#{tblLedger.approvedDateBs}" styleClass="np" /> </p:column> <p:column headerText="#{text.VNo}" width="70"> <h:outputText value="#{tblLedger.jvNo eq 0 ? '' : tblLedger.jvNo}" styleClass="np" /> </p:column> <p:column headerText="#{text.Remarks}" width="70"> <h:outputText value="#{tblLedger.remarks}" styleClass="np" /> </p:column> </p:dataTable> 我的托管bean代码是这样的: public void postProcessXLS(Object document) { HSSFWorkbook wb = (HSSFWorkbook) document; HSSFSheet sheet = wb.getSheetAt(0); sheet.shiftRows(0, sheet.getLastRowNum(), 0); HSSFCellStyle cellStyle = wb.createCellStyle(); HSSFFont fontHeader = (HSSFFont) wb.createFont(); cellStyle.setAlignment(HorizontalAlignment.CENTER); fontHeader.setFontName("Magnus Nepali"); cellStyle.setFont(fontHeader); for (Row row : sheet) { for (Cell cell : row) { cell.setCellStyle(cellStyle); } } try { wb.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 当我的备注栏仅包含 unicode 数字(如“२२२५०”)时,我收到以下错误: SEVERE: Servlet.service() for servlet [Faces Servlet] threw exception java.lang.NumberFormatException: For input string: "?????" at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) at java.lang.Double.parseDouble(Double.java:538) at org.primefaces.component.datatable.export.DataTableExcelExporter.updateCell(DataTableExcelExporter.java:344) at org.primefaces.component.datatable.export.DataTableExcelExporter.lambda$addColumnValue$0(DataTableExcelExporter.java:232) at org.primefaces.component.export.TableExporter.exportColumn(TableExporter.java:79) at org.primefaces.component.datatable.export.DataTableExcelExporter.addColumnValue(DataTableExcelExporter.java:232) at org.primefaces.component.datatable.export.DataTableExcelExporter.exportCells(DataTableExcelExporter.java:129) at org.primefaces.component.datatable.export.DataTableExporter.exportRow(DataTableExporter.java:144) at org.primefaces.component.datatable.export.DataTableExporter.exportAll(DataTableExporter.java:129) at org.primefaces.component.datatable.export.DataTableExcelExporter.exportTable(DataTableExcelExporter.java:405) at org.primefaces.component.datatable.export.DataTableExcelExporter.doExport(DataTableExcelExporter.java:97) at org.primefaces.component.datatable.export.DataTableExporter$ExportVisitCallback.visit(DataTableExporter.java:241) at org.apache.myfaces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:213) 但是当我向unicode数字注释添加一些字符而不是unicode数字时,就会导出excel。我正在使用 Apache POI 5.2.2 尝试设置 setStronglyTypedCells(false);,这不会尝试为 Excel 翻译数字。 https://primefaces.github.io/primefaces/11_0_0/#/components/dataexporter?id=customization public class CustomizedDocumentsView implements Serializable { private ExcelOptions excelOpt; @PostConstruct public void init() { excelOpt = new ExcelOptions(); excelOpt.setStronglyTypedCells(false); } public ExcelOptions getExcelOpt() { return excelOpt; } } <h:commandButton value="Export as XLS"> <p:dataExporter type="xls" target="tableId" fileName="cars" options="#{customizedDocumentsView.excelOpt}"/> </h:commandButton>
PrimeFaces 13 - 在 Tomcat 10.1.x(雅加达)上运行时不显示 Primeicons
我正在尝试将应用程序从 Tomcat 9 和 PrimeFaces 13 迁移到 Tomcat 10.1.11 和 Java 17。在完成所有繁重的工作之后,除了 PrimeFaces 之外,我的大部分工作都可以正常工作