jsf-2 相关问题

JavaServer Faces(JSF)是一个模型 - 视图 - 展示器框架,通常用于创建Web应用程序。与JSF 1.x相比,版本2.x是领先一步,显着扩展了标准的组件和组件库集。

当在JSF

我有一个方案,如果我选中一个复选框,则应该不选中另一个。 我正在使用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

回答 2 投票 0

重新排序P:包含输入的数据行

有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}现在不需要更多的解决方法...

回答 4 投票 0

在更新TabView

在更新整个TabView时,有一种简单的方法可以保留当前选项卡?

回答 4 投票 0

在向下钻取中显示值 SelectOneMenus(父子)

当我填充两个 selectOneMenu 的深入选择时,我遇到了恼人的问题。第一个菜单是“扇区”,它控制另一个类别。我加载类别依赖的选择...

回答 2 投票 0

值更改侦听器在 primefaces 日历中不起作用

我正在使用 primefaces 3.2 和 JSF 2.0 我的情况是我的表单中有文件日期、最后日期和下一个日期。 当用户输入文件日期时,我需要更新 bean 中的文件日期值,因此它的值可以是...

回答 7 投票 0

Primefaces 日历未触发 dateSelect

我正在尝试通过ajax从我的日历中获取值。 xhtml部分: 显示=“按钮” 掩码=“真”

回答 4 投票 0

旋转和调整图像大小

我使用 JSF 2、primefaces 5.3,我尝试使用旋转和调整图像大小,如 Jpg、png 或任何其他图像格式。但出现这个错误。 无法将行为附加到非 ClientBehavior...

回答 1 投票 0

使用命令链接的分页更改 Primefaces 数据表的页面

我有一个带分页的数据表,我想使用数据表外部的命令链接更改当前页面,如何获取它? 我有一个带分页的数据表,我想使用数据表外部的命令链接更改当前页面,如何获取它? <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)");

回答 4 投票 0

在素面中单击命令按钮时面板未呈现

当我偶然发现这个问题时,我正在摆弄 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 参数

回答 4 投票 0

如何覆盖 h:selectOneRadio 渲染器? jsf-impl中的渲染器类在哪里?

是否可以覆盖使用的渲染器?我试图从 JSF 2.2 的 jsf-impl 包中找到该类,但没有找到。我想这样做的原因是摆脱

回答 2 投票 0

使用 ViewScoped 和 Spring 服务的 ManagedBean 中出现 NotSerializedException

这是 ManagedBean @ManagedBean @ViewScoped 公共类 DetailItem { 私有静态最终长serialVersionUID = -7647929779133437125L; @ManagedProperty(value = "#{itemServiceImpl}"...

回答 2 投票 0

测试模板客户端中是否已定义 ui:insert

我想知道是否可以知道 ui:insert 是否在 ui:composition 中定义。 我知道我可以使用单独的 ui:param 来做到这一点,但只是想不这样做以保持简单......

回答 1 投票 0

为什么 JSF 转换器的 getAsObject() 方法被多次调用?

我的数据库结构通过连接表将用户实体与角色耦合,用户类拥有该关系并拥有引用角色实体集合的字段。 我想要链接...

回答 1 投票 0

Primefaces:页面上的多个数据表 - 排序

我正在使用 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> 希望有帮助。

回答 3 投票 0

Spring Security 6:静态资源未在登录页面加载

我正在使用 Spring Security 6 和 Java 17 开发 Spring Boot 应用程序。我的静态资源(CSS、JS、图像)未在登录页面上加载。这些资源位于资源下

回答 1 投票 0

标题:迁移到 Java 17、Spring 6 和 PrimeFaces 14 后出现“NoClassDefFoundError:jakarta/enterprise/inject/spi/el/ELAwareBeanManager”

我目前正在将项目从 Java 11 迁移到 Java 17,从 Spring 5 迁移到 Spring 6,以及从 RichFaces 迁移到 PrimeFaces 14(雅加达)。进行必要的更改后,我遇到以下情况

回答 1 投票 0

JSF CRUD Netbeans 教程 - 当 IDENTITY_INSERT 设置为 OFF 时,无法在表中插入标识列的显式值

我正在学习本教程,您可以直接从数据库创建 JSF CRUD 应用程序(从数据库生成实体类,然后从实体类生成 JSF 页面)。 当我尝试...

回答 1 投票 0

Eclipse 自定义 java 编译器

我正在使用 eclipse 创建我的 jsf 项目。 我创建了自己的组件,并且我不希望其他程序员能够使用 jsf 常规组件,例如 h:inputtext 等。 我怎样才能做到

回答 2 投票 0

是否可以从动物列表中获取狗列表而无需演员表?

我有一张受保护的地图>动物;在我的课堂上。在我的构造函数中,我有 Animals.put("狗", new ArrayList()); Animals.put("猫", ...

回答 2 投票 0

将 JSF inputText 与支持 bean 的字段链接而不显示其值

我有这样的支持豆: @ManagedBean @SessionScoped 公共类测试Bean { 私有字符串测试字符串; 公共字符串 getTestString() { 返回测试字符串; } 公共...

回答 3 投票 0

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.