Tag: jsf 2

JSF自定义转换器未调用null值

我在输出java.math.BigDecimal时创建了自定义Converter。 当BigDecimal为0.00或null我想输出破折号。 这是我的XHTML 我遇到的问题是当#{item.currentValue}为null ,不会调用Converter中的getAsString方法。 @FacesConverter(“my.bigDecimalConverter”) public class BigDecimalConverter implements Converter { @Override public String getAsString(FacesContext context, UIComponent component, Object value) { if (context == null || component == null) { throw new NullPointerException(); } if (value == null) { System.out.println(“null=”); return “–“; } System.out.print(“Class=” + value.getClass()); if (value instanceof String) { System.out.println(“Str=” + value); […]

Flash范围是否没有竞争条件?

我发现JSF 2.0 Flash范围是通过cookie在Mojarra 2.x中实现的。 似乎发生的情况是,当使用Flash从视图A导航到视图B时,JSF会发送重定向响应。 这是包含set-cookie标头的相同响应。 由于cookie是浏览器的全局,我想知道这会导致竞争条件的可能性。 由于在重定向响应期间设置了cookie,我试图找出HTTP规范是否以某种方式保证浏览器响应的请求始终是第一个使用此cookie的请求。 但是,一般情况下,如果第一个请求以某种方式停止(因为Internet决定将该特定请求路由到世界各地),则可能仍然存在问题,然后来自另一个选项卡的第二个请求首先到达服务器。 对于两页之间的闪存范围而言,使用cookie不是一个可怕的想法,或者我是否忽略了某些东西并且它是否非常安全?

如何在JSF 2.0中创建自定义404消息?

目前在我的应用程序中,当用户在URL栏中键入一些非法目的地时,请看到: 我想让它更漂亮,并使用我自己的标记和一点css进行自定义。 – 我需要在我的应用程序上编程,或者我必须在应用程序服务器中配置它吗? – 如果我想这样做,我应该从哪里开始?

JSF转换器导致validation器被忽略

这是领域: validation者: @Named @ApplicationScoped public class MobilePhoneNumberValidator implements Validator, Serializable { @Override public void validate(FacesContext fc, UIComponent uic, Object o) throws ValidatorException { // This will appear in the log if/when this method is called. System.out.println(“mobilePhoneNumberValidator.validate()”); UIInput in = (UIInput) uic; String value = in.getSubmittedValue() != null ? in.getSubmittedValue().toString().replace(“-“, “”).replace(” “, “”) : “”; if […]

ViewScope构造函数调用了两次,不确定原因

我已经看到了关于调用bean构造函数和ViewScope的其他问题,我仍然遇到了困难。 我看到的问题涉及我的应用程序中的两个特定页面。 第一个是dataTable(现在它填充了随机生成的数据,但最终将调用数据库),第二个页面是一个相当简单的显示页面,其中所选行的信息以表格forms显示,用于编辑或查看 – 这是我的detail.xhtml页面。 这个页面的bean就是问题; 它的构造函数被调用两次:首先当我导航到页面时,再次当我按下commandButton是否提交更改或取消更改无关紧要时,detail.xhtml支持bean的构造函数被第二次调用。 我的bean是@ViewScoped ,导入javax.faces.bean.ViewScoped 。 一些其他细节可能会有所不同,但如果他们这样做我不明白为什么:我的UserDetailBean.javainheritance自基础bean(我最初称之为UIBaseBean.java)。 现在,我的UIBaseBean是@RequestScoped 。 据我所知,这不应该@ViewScoped ,因为我的UserDetailBean是@ViewScoped ,请纠正我,如果我错了。 可能有所不同的另一个细节是在UIBaseBean和UserDetailBean的构造函数中设置变量。 我想在页面顶部的工具栏中显示用户的位置。 为此,我在UIBaseBean中创建了一个变量: protected String toolbarDescription; 我还在UIBaseBean中提供了setter和getter。 在UIBaseBean的构造函数中,我定义了变量: toolbarDescription = “fix me”; 这个定义就是这样我知道在我的应用程序中覆盖任何特定页面的支持bean中的变量。 在我的UserDetailBean中,我为String toolbarDescription分配了一个新值。 该值显示在detail.xhtml页面上。 否则,我的detail.xhtml页面的bean非常直接,它获取并设置了detail.xhtml页面上表单中数据显示的属性。 设置详细信息页面,以便通过重定向进行导航,并且导航离开(当按下commandButton时)会发生重定向。 我尝试使用带有和不带重定向的faces-config导航规则,带有和不带重定向的隐式导航,但UserDetailBean构造函数总是被调用两次。 哦,我在UserDetailBean构造函数的toolbarDescription变量上设置了一个断点,它会使程序停止两次:首次调用页面时,再次按下详细信息页面上的commandButton。 根据我的描述,任何人都可以告诉我为什么我的构造函数被调用两次? 我是否错误地设计了我的bean,或者我的应用程序中的问题更严重? import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; import javax.faces.event.ActionEvent; import [package name].UIBaseBean; import java.util.Locale; import javax.faces.bean.ManagedProperty; @ManagedBean @ViewScoped public class […]

如何使用JSF 2 h:outputStylesheet实现“CSS版本控制”(以解决缓存问题)?

我开始使用JSF 2,所以我想尝试一下h:outputStylesheet。 它工作正常但后来我尝试应用“模式”或将查询字符串添加到请求的技巧,该请求随文件版本而变化以强制浏览器获取更改。 像这里使用的东西 。 不幸的是我无法做到这一点。 实际上,当使用该标记时,它不会生成一个简单的URL,而是一个已经具有查询字符串的计算URL。 我已经在规范和这里找到了有关JSF 2中资源版本化的一些信息,但它似乎指的是资源的多个版本,这不是我需要的。 当然,我总是可以回去不使用新标签。 但我想在此分享一下以供讨论。 更新1 – 一些例子: 我试过的是这样的: 其呈现为: 相当具有描述性。 😉 我试图得到的是这样的: 其中,使用JSP,我曾经这样说过: <link rel="stylesheet" type="text/css" href="”/>

Primefaces:在datatable上设置页面

我在primefaces中有一个数据表,我想,当我在其中添加一行时,查看数据表的最后一页。 我的.xhtml页面是: … … … … function setTabIndexTT(){ tbl1.getPaginator().setPage(#{calculatePageTable.pageTableTemplate}); } 豆: @ManagedBean @SessionScoped public class CalculatePageTable { private int pageTableTemplate = 0; private int pageTableField = 0; public void setPageTableTemplate() { final DataTable d = (DataTable) FacesContext.getCurrentInstance().getViewRoot() .findComponent(“form:templateTable”); pageTableTemplate = d.getPageCount() – 1; } public int getPageTableTemplate() { return pageTableTemplate; } public void setPageTemplateField() { […]

JSF:嵌套ui:repeat中的值绑定

我对标签有一个奇怪的问题。 即使对于我非常简单的示例,嵌套重复组件内的值绑定也无法按预期工作。 我有一个像这样的简单小面孔: 和沙盒类: @Component @Scope(“request”) public class Sandbox { public static class Row { private List columns = Arrays.asList(new Column(), new Column()); public List getColumns() { return columns; } } public static class Column { private boolean value; public void setValue(boolean value) { this.value = value; } public boolean getValue() { return this.value; } […]

如何部分重新加载ui:重复?

我们有一个基于JBoss 7.1构建的Web应用程序,带有JSF2和Primefaces 3.3。 在我们的一个页面上,有一个ui:repeat显示10个项目; 然后用户可以点击某种“显示更多”按钮,并通过ajax显示另外10个项目。 用户可以单击“显示更多”按钮,直到没有更多项目显示。 注意:这不是分页,每次单击“显示更多”时显示的列表会变长。 实际上,当用户点击按钮时,服务器返回旧项和新项,而JSF的客户端每次都必须通过jQuery重建整个中继器。 我们希望找到一个更好,更高效的解决方案。 旧项目在n-1和n调用之间不会发生变化,因此如果服务器只能通过ajax返回10个新项目,效率会更高。 在JSF2中有可能吗? JSF似乎并不真正符合这种递归渲染。 唯一可以帮助我们的组件是TreeNode组件,但它看起来有点像黑客: – /

使用p:calendar在jsf h:datatable中进行交叉字段validation

我注意到这个问题被问到了,但是没有正确回答。 我有一个数据表,有两列开始日期和结束日期 。 两者都包含primefaces p:日历控件。 我需要确保对于每一行,column1中的日期不在column2中的日期之后。 我想把它绑定到JSFvalidation框架,但我遇到了麻烦。 我已经尝试将datatable标记为rowStatePreserved =“true”,这允许我获取值,但是仍然存在错误,因为当它失败时,第一行中的所有值都会覆盖所有其他值。 我做错了什么,或者我应该采用完全不同的策略? xhtml代码 Start End validation码 public void doCrossFieldValidation(ComponentSystemEvent cse) { UIData eventsDaysStable = (UIData) cse.getComponent().findComponent(“eventDaysTable”); if (null != eventsDaysStable && eventsDaysStable.isRendered()) { Iterator startDateCalendarIterator = eventsDaysStable.findComponent(“eventDayStartColumn”).getChildren().iterator(); Iterator endDateCalendarIterator = eventsDaysStable.findComponent(“eventDayEndColumn”).getChildren().iterator(); while (startDateCalendarIterator.hasNext() && endDateCalendarIterator.hasNext()) { org.primefaces.component.calendar.Calendar startDateComponent = (org.primefaces.component.calendar.Calendar) startDateCalendarIterator.next(); org.primefaces.component.calendar.Calendar endDateComponent = (org.primefaces.component.calendar.Calendar) endDateCalendarIterator.next(); Date […]