JavaServer Faces(JSF)是一个模型 - 视图 - 展示器框架,通常用于创建Web应用程序。与JSF 1.x相比,版本2.x是领先一步,显着扩展了标准的组件和组件库集。
我有一个带分页的数据表,我想使用数据表外部的命令链接更改当前页面,如何获取它? 我有一个带分页的数据表,我想使用数据表外部的命令链接更改当前页面,如何获取它? <p:commandLink title="changePage" action="#{myBean.changeMethod}" update="myDataTable" /> <p:dataTable id="myDataTable" var="myItem" paginator="true" rows="1" value="#{myBean.ListOfItem}" binding="#{myBean.DataTable}"> ... ... </p:dataTable> 您好! 这会将表格的页面设置为第一页 public void changeMethod() { final DataTable d = (DataTable) FacesContext.getCurrentInstance().getViewRoot() .findComponent("myDataTable"); int first = 0; d.setFirst(first); } 或者在客户端: widgetVar.getPaginator().setPage(pageindex); 编辑:“first”属性表示要显示的第一行的索引 没关系,但现在在客户端的 primefaces 5.1 中你必须这样做: PF('widgetVar').getPaginator().setPage(pageindex); 对我来说效果很好,但你必须输入整个组件名称 FacesContext.getCurrentInstance().getViewRoot().findComponent("form:panel:datatable"); 对我来说这段代码有效 PrimeFaces.current().executeScript("PF('widgetVarId').getPaginator().setPage(1)");
当我偶然发现这个问题时,我正在摆弄 primefaces 组件...... 我有一个示例页面,其中包含以下内容, 当我偶然发现这个问题时,我正在摆弄 primefaces 组件...... 我有一个示例页面,其中包含以下内容, <h:form> <p:panel id="p1"> <p:commandButton value="display" actionListener="#{myTestBean.display}" update="p2"> </p:commandButton> </p:panel> <p:panel id="p2" rendered="#{myTestBean.show}"> <p:inputText value="#{myTestBean.val1}" id="t1"></p:inputText> <p:inputText value="#{myTestBean.val2}" id="t2"></p:inputText> <p:commandButton value="click me" update="@form" action="#{myTestBean.disply}"></p:commandButton> </p:panel> </h:form> 我的支持 bean 包含以下内容, public class Testbean implements Serializable { private String val1; private String val2; private boolean show; //getters and setters for the above... public void display(){ if(show == false){ setShow(true); } } public void disply(){ System.out.println("I am here"); val1 = "hi"; val2 = "hello"; if(show == false){ setShow(true); } } } 现在,这里的问题是,当我单击第一个按钮(显示)时,下面的面板(p2)会正确渲染。但是,当我单击第二个按钮(单击我)时,面板会被隐藏,并且单击第二个按钮时,它永远不会转到支持 bean 方法“disply()”。 我在第二个按钮中使用了动作侦听器,但同样的行为。另外,我在第二个按钮中给出了 update =“p2”,即使这样也没有产生我想要的结果。 有人可以帮我解决这个问题并让我知道我做错了什么地方吗? 谢谢你。 需要将 bean 放置在视图范围中,以便记住同一视图上所有先前的 (ajax) 操作。 @ManagedBean @ViewScoped public class TestBean { // ... } 当 bean 被放置在请求作用域中时,boolean show 将被重新初始化为默认的 false,因此 rendered 属性将在 JSF 寻找要调用的操作方法时评估 false,因此永远不会找到并调用操作方法。 另请参阅: 如何选择合适的bean范围? commandButton/commandLink/ajax 操作/侦听器方法未调用或输入值未更新 我将按钮包围起来,如下图所示 <h:form> <h:commandButton styleClass="toggle_btn" action="#{buttonNavBean.show()}" style=" font-family: sans-serif; color: black;" value="Sign In/Sign Up"></h:commandButton> </h:form> 我也面临着同样的挑战。我试图在网上搜索,但一切都是徒劳。但经过几次尝试,我发现,由于我使用commandButton来设置渲染面板的值,因此无法计算出UIForm,因此,我用包围了commandButton UIForm并且它按照我想要的方式正常工作。 当使用actionListener =“#{myTestBean.display}”时,backinbean方法应该是 公共无效显示(ActionEvent事件){ if(show == false){ setShow(true); } } 必须声明 ActionEvent 参数
如何覆盖 h:selectOneRadio 渲染器? jsf-impl中的渲染器类在哪里?
是否可以覆盖使用的渲染器?我试图从 JSF 2.2 的 jsf-impl 包中找到该类,但没有找到。我想这样做的原因是摆脱
使用 ViewScoped 和 Spring 服务的 ManagedBean 中出现 NotSerializedException
这是 ManagedBean @ManagedBean @ViewScoped 公共类 DetailItem { 私有静态最终长serialVersionUID = -7647929779133437125L; @ManagedProperty(value = "#{itemServiceImpl}"...
我想知道是否可以知道 ui:insert 是否在 ui:composition 中定义。 我知道我可以使用单独的 ui:param 来做到这一点,但只是想不这样做以保持简单......
为什么 JSF 转换器的 getAsObject() 方法被多次调用?
我的数据库结构通过连接表将用户实体与角色耦合,用户类拥有该关系并拥有引用角色实体集合的字段。 我想要链接...
我正在使用 Primefaces 5.2。 在我的页面上,我有几个具有相同列和相同 sortBy 表达式的 p:datatable。 像这样的东西: 我正在使用 Primefaces 5.2。 在我的页面上,我有几个具有相同列和相同 sortBy 表达式的 p:datatable。 类似: <p:dataTable .. id="tab1"> <p:column sortBy="#{prop1}"> #{prop1} </p:column> </p:dataTable> <p:dataTable .. id="tab2"> <p:column sortBy="#{prop1}"> #{prop1} </p:column> </p:dataTable> 到目前为止,排序工作正常,但如果我对其中一个表(我们称之为表 A)进行排序,然后刷新页面(例如,通过触发 h:commandButton),我会得到奇怪的行为,最后会出现 NullPointerException。在这种情况下,所有表都突出显示与表 A 相同的列。此外,一旦我对表 A 以外的表进行排序,就会发生以下异常: 21:33:36,149严重javax.enterprise.resource.webcontainer.jsf.application(默认任务25)渲染视图错误[/stocks.xhtml]:java.lang.NullPointerException 在 org.primefaces.component.datatable.DataTable.findColumnInGroup(DataTable.java:905) [primefaces-5.2.jar:5.2] 在 org.primefaces.component.datatable.DataTable.findColumn(DataTable.java:896) [primefaces-5.2.jar:5.2] 在 org.primefaces.component.datatable.DataTable.getSortColumn(DataTable.java:1401) [primefaces-5.2.jar:5.2] 在 org.primefaces.component.datatable.feature.SortFeature.singleSort(SortFeature.java:136) [primefaces-5.2.jar:5.2] 在 org.primefaces.component.datatable.DataTableRenderer.preRender(DataTableRenderer.java:109) [primefaces-5.2.jar:5.2] 在 org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:83) [primefaces-5.2.jar:5.2] 在 javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 在 javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 在 com.sun.faces.facelets.component.RepeatRenderer.encodeChildren(RepeatRenderer.java:104) [jsf-impl-2.2.8-jbossorg-1.jar:] 在 com.sun.faces.facelets.component.UIRepeat.process(UIRepeat.java:621) [jsf-impl-2.2.8-jbossorg-1.jar:] 在 com.sun.faces.facelets.component.UIRepeat.encodeChildren(UIRepeat.java:1110) [jsf-impl-2.2.8-jbossorg-1.jar:] 在 javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 在 javax.faces.render.Renderer.encodeChildren(Renderer.java:176) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 在 javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 在 javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 在 javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 在 javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 在 com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:456) [jsf-impl-2.2.8-jbossorg-1.jar: 解决方案是在包含其他表的表中添加 rowStatePreserved="true"。这是在 Primefaces 5.1.14 中添加的,是 JSF 2.1 的一部分。 鸣谢:sdjavaudvk (http://forum.primefaces.org/viewtopic.php?f=3&t=43441)。 <p:dataTable id="tab1" var="resumo" value="#{resumoView.resumos}" rows="20" paginator="true" rowsPerPageTemplate="5,10,15,20" rowStatePreserved="true"> ... 您是否尝试过为每个数据表使用不同的表单?像这样: <h:form> <p:dataTable id="tab1"> ... </p:dataTable> </h:form> <h:form> <p:dataTable id="tab2"> ... </p:dataTable> </h:form> 我们在Primefaces6.0上遇到了同样的问题。 我们有一个包含两个表的表单,并且可以通过值列表(filterMatchMode 精确)或通过输入文本(filterMatchMode 包含)过滤特定列。 第一个表没有工作过滤器(我们遇到了与您相同的 NullPointerException),第二个表工作正常。 这两个表在一个组件中,两个表中过滤和排序的列是使用 JSTL 有条件构建的,如下所示: <c:choose> <c:when test="#{cc.attrs.filterOperatorExact}"> <p:column headerText="Header name" sortBy="#{vector.operatorForDisplay}" filterBy="#{vector.operatorForDisplay}" filterMatchMode="exact" filterOptions="#{cc.attrs.filtersOperatorList}"> <h:outputText value="#{vector.operatorForDisplay}" /> </p:column> </c:when> <c:otherwise> <p:column headerText="Header name" sortBy="#{vector.operatorForDisplay}" filterBy="#{vector.operatorForDisplay}" filterMatchMode="contains"> <h:outputText value="#{vector.operatorForDisplay}" /> </p:column> </c:otherwise> </c:choose> 使用“JSF方式”对渲染的属性执行此操作,问题消失了: <p:column headerText="Header name" sortBy="#{vector.operatorForDisplay}" filterBy="#{vector.operatorForDisplay}" filterMatchMode="exact" filterOptions="#{cc.attrs.filtersOperatorList}" rendered="#{cc.attrs.filterOperatorExact}"> <h:outputText value="#{vector.operatorForDisplay}"/> </p:column> <p:column headerText="Header name" sortBy="#{vector.operatorForDisplay}" filterBy="#{vector.operatorForDisplay}" filterMatchMode="contains" rendered="#{not cc.attrs.filterOperatorExact}"> <h:outputText value="#{vector.operatorForDisplay}"/> </p:column> 希望有帮助。
Spring Security 6:静态资源未在登录页面加载
我正在使用 Spring Security 6 和 Java 17 开发 Spring Boot 应用程序。我的静态资源(CSS、JS、图像)未在登录页面上加载。这些资源位于资源下
我目前正在将项目从 Java 11 迁移到 Java 17,从 Spring 5 迁移到 Spring 6,以及从 RichFaces 迁移到 PrimeFaces 14(雅加达)。进行必要的更改后,我遇到以下情况
JSF CRUD Netbeans 教程 - 当 IDENTITY_INSERT 设置为 OFF 时,无法在表中插入标识列的显式值
我正在学习本教程,您可以直接从数据库创建 JSF CRUD 应用程序(从数据库生成实体类,然后从实体类生成 JSF 页面)。 当我尝试...
我正在使用 eclipse 创建我的 jsf 项目。 我创建了自己的组件,并且我不希望其他程序员能够使用 jsf 常规组件,例如 h:inputtext 等。 我怎样才能做到
我有一张受保护的地图>动物;在我的课堂上。在我的构造函数中,我有 Animals.put("狗", new ArrayList()); Animals.put("猫", ...
将 JSF inputText 与支持 bean 的字段链接而不显示其值
我有这样的支持豆: @ManagedBean @SessionScoped 公共类测试Bean { 私有字符串测试字符串; 公共字符串 getTestString() { 返回测试字符串; } 公共...
我对Struts很感兴趣,并且开始学习JSF 2.0。我可以继续使用 Struts 中有效的方法来减少攻击向量,还是有我需要编码的新攻击向量?
我目前能够使用自定义异常处理程序捕获所有异常,如下所述: JSF 2 全局异常处理,导航到错误页面未发生 我正在做广泛的你...
Omnifaces CombinedResourceHandler 的 SHA-384 完整性问题
我们使用CombinedResourceHandler 来组合我们的CSS 和JS 文件。这在部署应用程序时工作得很好,但一段时间后(我猜没有使用应用程序)浏览器有一个
p:带有@requestscoped bean PhaseId null的graphicImage
我尝试使用 @RequestScoped bean 从流中加载图像。我将 JSF 和 JavaEE7 与 Primefaces 7.0 和 Wildfly 9 一起使用。 我尝试使用 @RequestScoped bean 从流中加载图像。我将 JSF 和 JavaEE7 与 Primefaces 7.0 和 Wildfly 9 结合使用。 <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui"> <h:outputStylesheet name="primeicons/primeicons.css" library="primefaces" /> <h:form> <p:scrollPanel> <ui:repeat value="${u.fileInfos}" var="image" id="manuelSwitcherImages"> <p:link href="${request.contextPath}/admin/single-fileInfo.xhtml"> <f:param name="fileName" value="${image.uniqueFileName}"/> <p:graphicImage value="${imageView.image}" width="500" id="image" rendered="${!image.uniqueFileName.isEmpty()}"> <f:param name="fileName" value="${image.uniqueFileName}" /> </p:graphicImage> </p:link> </ui:repeat> </p:scrollPanel> </h:form> </ui:composition> 还有支撑豆: @Named @RequestScoped public class ImageView implements Serializable { private static final long serialVersionUID = -1067751029307336424L; @Inject private AppProperties appProperties; private DefaultStreamedContent image; public ImageView() { } @PostConstruct public void setStream() { image = new DefaultStreamedContent(); FacesContext context = FacesContext.getCurrentInstance(); Map<String, String> map = context.getExternalContext().getRequestParameterMap(); String fileName = map.get("fileName"); System.out.println("PhaseId:" + context.getCurrentPhaseId() + " fileName:"+fileName); if (context.getCurrentPhaseId() != PhaseId.RENDER_RESPONSE) { if (fileName != null && !fileName.isEmpty()) { image.setContentType("image/jpeg"); FileInputStream fis; try { fis = new FileInputStream( new File(appProperties.getDocinfoRootPath() + File.separatorChar + fileName)); image.setStream(fis); } catch (FileNotFoundException e) { e.printStackTrace(); } } } } public DefaultStreamedContent getImage() { return image; } } 当我加载页面时,以下内容会记录到控制台: 09:48:58,562 INFO [stdout] (default task-48) PhaseId:RENDER_RESPONSE 6 fileName:null 09:49:02,331 INFO [stdout] (default task-49) PhaseId:null fileName:IMG_20240730_203743_494451608254739966.jpg 当我单击链接以在单个视图中显示图像(或加载请求:http://localhost:8080/forras-admin/admin/single-fileInfo.xhtml?fileName=IMG_20240801_103857_3362857899511577984.jpg)时,日志如下: 10:03:00,553 INFO [stdout] (default task-114) PhaseId:RENDER_RESPONSE 6 fileName:IMG_20240731_155939_3742115169047896565.jpg 10:03:00,764 INFO [stdout] (default task-115) PhaseId:null fileName:null 单一视图如下所示: <?xml version="1.0" encoding="UTF-8"?> <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://primefaces.org/ui" xmlns:dp="http://integrity.hu/dynap" template="/WEB-INF/templates/default.xhtml"> <ui:define name="content"> <h:form> <p:graphicImage value="${imageView.image}" id="singleimage" /> </h:form> </ui:define> </ui:composition> 为什么 PhaseId 为空,如何处理 RENDER_RESPONSE 中的不同文件内容?为什么图像在单一视图中不可见? 非常感谢您的建议。 以下代码在单一视图中对我有用: <?xml version="1.0" encoding="UTF-8"?> <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://primefaces.org/ui" xmlns:dp="http://integrity.hu/dynap" template="/WEB-INF/templates/default.xhtml"> <ui:define name="content"> <h:form> <p:scrollPanel style="width:100%;height:500px;"> <p:graphicImage value="${imageView.image}" id="singleimage"> <f:param name="fileName" value="#{request.getParameter('fileName')}" /> </p:graphicImage> </p:scrollPanel> </h:form> </ui:define> </ui:composition>
如何在 PrimeFaces 中通过 JavaScript 触发组件刷新?
是否可以从 javascript 更新 PrimeFaces 组件,以便强制刷新? 我正在对话框中使用此按钮进行 ajax 保存调用。 我已附上我的自定义 javascr...
如何在 JavaScript 中触发隐藏的 JSF commandLink?
我在此线程上有一个类似的问题,其中我有一个 JavaScript 函数,它将触发隐藏的 commandLink 的单击事件。隐藏命令将触发 Java Bean 中的操作。这...