标签: omnifaces

Primefaces选项列表目标和源值不会更改

我的primefaces pickList源和目标值不会改变,我已经在primefaces showcase中跟踪了示例, 并且在这里查看了几个帖子,但仍然无法解决问题.我正在使用数据库中的列表来填充源代码,如下所示:

private DualListModel<Course> courseModel;
public CourseBean() {
    List<Course> target = new ArrayList<Course>();
    List<Course> source = new ArrayList<Course>();
    courseModel = new DualListModel<Course>(source, target);
}
...
//this DualListModel getter also populates the source with values from db
public DualListModel<Course> getCourseModel() {
    courseModel.setSource(getCourseList());
    return courseModel;
}
Run Code Online (Sandbox Code Playgroud)

我的转换器是

import org.omnifaces.converter.SelectItemsConverter;

@FacesConverter("courseConverter")
public class CourseConverter extends SelectItemsConverter {
@Override
public String getAsString(FacesContext context, UIComponent component,
        Object value) {
    Integer id = (value instanceof Course) ? ((Course) value).getId()
            : null;
    return …
Run Code Online (Sandbox Code Playgroud)

java jsf primefaces omnifaces

4
推荐指数
1
解决办法
2万
查看次数

至少填充一个字段时,根据需要验证一组字段

在基本注册屏幕(带有按钮注册记录屏幕)中,有两个面板:

数据面板:

在此处输入图片说明

地址面板:

在此处输入图片说明

我只能通过完成“数据”面板进行注册。不必填写“地址”面板。但是,如果填写了“地址”面板的至少一个字段,则应要求同一面板中的所有其他字段。

在此处输入图片说明

我该如何实现?

validation jsf primefaces jsf-2 omnifaces

4
推荐指数
1
解决办法
4409
查看次数

JSF2.0如何在使用commandButton时将viewParam传递给请求范围的支持bean?

我有以下页面:

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:o="http://omnifaces.org/ui"
    xmlns:thehub="http://java.sun.com/jsf/composite/components/thehub"
    template="/templates/masterTemplate.xhtml">
    <f:metadata>
        <f:viewParam
            id="returnToViewParam"
            name="returnTo"
            value="#{loginMB.returnTo}"
            required="true" />
        <f:viewParam
            id="oauth_verifierViewParam"
            name="oauth_verifier"
            value="#{loginMB.oauth_verifier}" />
        <f:viewParam
            id="oauth_tokenViewParam"
            name="oauth_token"
            value="#{loginMB.oauth_token}" />
        <f:event
            type="preRenderView"
            listener="#{loginMB.preRenderView()}" />
    </f:metadata>

    <ui:define name="body">
        <o:form
            id="loginForm"
            includeViewParams="true">
            <div class="form-vertical well">
                <h4>New Users</h4>
                <h5>
                    <h:link outcome="signup">Click here to create an account</h:link>
                </h5>
                <hr />
                <h4>Existing Users</h4>
                <h:commandButton
                    id="googleLoginCommandLink"
                    styleClass="btn"
                    action="#{loginMB.redirect()}"
                    value="Google">
                    <f:param
                        name="returnTo"
                        value="#{param.returnTo}" />
                </h:commandButton>
                <div class="clearfix"></div>
            </div>
        </o:form>
    </ui:define> …
Run Code Online (Sandbox Code Playgroud)

jsf facelets omnifaces

4
推荐指数
1
解决办法
2550
查看次数

使用Omnifaces <o:cache>使数据过期

我有一个大的应用程序作用域内容缓冲区,我想保留在内存中.使用Omnifaces让我们很容易做到这一点.

但是,如果我需要使缓存过期,似乎没有方法可以这样做.如果需要,我可以设置时间属性,但这似乎并不是这个难题的理想答案.

有关强制更新基础数据的任何建议吗?

谢谢,

Temar

jsf-2 omnifaces

4
推荐指数
1
解决办法
217
查看次数

使用h:按钮时,除去URL中的jsessionid = xxx路径参数

我在Tomcat7和JSF 2.1中使用OmniFaces FullAjaxExceptionHandler来处理ViewExpiredException.我设置了与OmniFaces展示相同的错误页面.在这里查看错误页面,这里是模板.

它工作正常.当会话过期时,我最终会出现expired.xhtml错误页面.但是,当我单击错误页面中的以下链接时,

 <p><a href="#{requestScope['javax.servlet.error.request_uri']}">Back to initial page.</a></p>
Run Code Online (Sandbox Code Playgroud)

然后我得到以下异常:

com.sun.faces.mgbean.ManagedBeanCreationException: An error occurred performing resource injection on managed bean 
Run Code Online (Sandbox Code Playgroud)

这不是一个大问题.无论如何,我需要一个将用户指向主页的按钮.所以我用下面的按钮替换它:

<h:button value="Home" outcome="logout" />
Run Code Online (Sandbox Code Playgroud)

以及此导航案例:

<navigation-rule>
    <from-view-id>*</from-view-id>
    <navigation-case>
        <from-outcome>logout</from-outcome>
        <to-view-id>/stdPortal/index.xhtml</to-view-id>
        <redirect/>
    </navigation-case>
</navigation-rule>
Run Code Online (Sandbox Code Playgroud)

导航将我带到了正确的页面,但会话ID显示在URL中:

https://localhost/stdPortal/index.xhtml;jsessionid=B68784B4ED8882A6575A2EE4012AF1B5
Run Code Online (Sandbox Code Playgroud)

我不想要这个.我怎么摆脱它?我希望网址如下:

https://localhost/stdPortal/index.xhtml
Run Code Online (Sandbox Code Playgroud)

jsessionid jsf-2 omnifaces

4
推荐指数
1
解决办法
3621
查看次数

如果实体的所有字段都为空,我如何跳过bean验证?

我有一个像这样的地址实体:

@Entity
public class Address implements java.io.Serializable {
    @Id @GeneratedValue(strategy = IDENTITY)
    private Long id;

    @Size(max = 100)
    private String street;

    @Size(max = 15)
    private String nr;

    @Field
    @Size(min = 1, max = 20) @NotBlank
    private String city;
}
Run Code Online (Sandbox Code Playgroud)

这是其他几个实体的一部分.对于一个这样的实体,地址是可选的.我有一个视图,我们的用户可以通过几个表单输入编辑整个实体,包括几个地址字段.

为了能够编辑地址,我使用空地址实体初始化父实体.

现在问题是:Address当所有地址字段都为空时,我不想在实体上持久存在.为了实现这一点,我需要跳过实体的验证,如果(并且仅当)所有字段Address都为空.我该如何以最优雅的方式做到这一点?

我目前正在做的是完全跳过bean验证和<o:validateBean disabled="true" />提交按钮,null如果它是空的,则设置地址.但这听起来像是一个完全黑客,因为它在所有情况下禁用所有验证.我怎么能做得更好?

bean-validation jsf-2 omnifaces

4
推荐指数
1
解决办法
2111
查看次数

WELD-001409类型[EagerBeansRepository]的模棱两可的依赖项

我正在尝试将JSF应用程序迁移到CDI。我已作出以下更改:

  • 向WEB-INF添加了一个空bean.xml文件
  • 将@ManagedBean的更改为@Named
  • 将我必须拥有的所有范围更改为CDI范围(会话,视图,请求)
  • 将所有@EJB和@ManagedProperty更改为@Inject

但是,Omnifaces错误阻止了部署,因为我三次遇到以下错误:

org.jboss.weld.exceptions.DeploymentException:WELD-001409类型[EagerBeansRepository]的模棱两可的依赖项,在注入点[[BackedAnnotatedField] @Inject私有org.omnifaces.ApplicationListener.eagerBeansRepository]上带有限定符[@Default]。可能的依赖关系[[带限定符[@Any @Default的托管Bean [类org.omnifaces.cdi.eager.EagerBeansRepository]],带限定符[@Any @Default的托管Bean [类org.omnifaces.cdi.eager.EagerBeansRepository]] ]

我已降级为Omnifaces 1.8.1,并且部署成功。为什么Omnifaces 2.0导致此错误?

开发环境:

  • 玻璃鱼4
  • Omnifaces 2.0
  • JSF(Mojarra 2.2.0)
  • WELD-000900 2.0.0(SP1)

jsf glassfish cdi omnifaces weld

4
推荐指数
1
解决办法
3501
查看次数

在运行时获取所有已初始化的@ Named-beans列表

我使用javax.inject.Namedjavax.enterprise.context.*Scopedorg.omnifaces.cdi.ViewScoped来定义我的观点豆的生活范围.

现在我想获得所有实例化bean的列表.首先,我认为这篇博客文章涵盖了这个问题,但它只列出了@ManagedBeans.

你知道如何列出它们吗?如果不修复JavaEE的实现甚至版本,这是否可行?

亲切的问候,六甲

PS:我已经找到了org.omnifaces.cdi.BeanStorage,但我不知道如何访问它的地图.

jsf cdi omnifaces

4
推荐指数
1
解决办法
408
查看次数

OmniFaces加载/卸载ViewScopedBean

为了缩小范围,我们正在从Jboss 6 EAP(JSF 2.1)升级到Jboss 7 EAP(JSF 2.2)。我们的工作应用程序现在遇到OmniFaces ViewScoped bean问题。

版本:

  • Mojarra 2.2.14
  • OminFaces 2.6.9
  • PrimeFaces 6.2.5

我们有一个这样的数据表:

<p:dataTable id="tblLegalHolds" widgetVar="tableLegalHolds" var="row"
        rowKey="#{row.id}" filterEvent="enter" 
        lazy="true"
        value="#{bean.lazyDataModel}"
        rows="15">
Run Code Online (Sandbox Code Playgroud)

注意:我们的bean是OmniFaces ViewScoped,此时我们的表工作正常!

问题: 接下来,我们添加一列,其中包含到新页面的导航,如下所示:

<p:column width="60" exportable="false">
    <p:button value="Open" outcome="legal-hold-edit">
        <f:param name="id" value="#{row.id}" />
    </p:button>
</p:column>
Run Code Online (Sandbox Code Playgroud)

现在我们的bean立即被加载和卸载,如果我们执行HTML的查看源,我们将看到Omnifaces脚本被添加了两次,就像这样……

OmniFaces.Unload.init('f1c1ff81-c87f-4406-b98f-a3eaff977e96');
OmniFaces.Unload.init('45e7de9d-53c7-4426-a972-797c48c46733');
Run Code Online (Sandbox Code Playgroud)

我们在ViewScoped bean中添加了@PostConstruct,以证明它被两次调用。对于该导航,我们的faces-config.xml看起来像这样。

<navigation-case>
    <from-outcome>legal-hold-edit</from-outcome>
    <to-view-id>/legal/legal-hold-edit.xhtml</to-view-id>
    <redirect include-view-params="true"/>
</navigation-case>
Run Code Online (Sandbox Code Playgroud)

现在有趣的是,如果我们删除faces-config.xml中的“ include-view-params”,就像下面的代码一样,一切将开始正常运行,则只创建了一次ViewScoped bean,并且仅向其中添加了1个OmniFaces.Unload.init脚本。页。

<navigation-case>
    <from-outcome>legal-hold-edit</from-outcome>
    <to-view-id>/legal/legal-hold-edit.xhtml</to-view-id>
    <redirect/>
</navigation-case>
Run Code Online (Sandbox Code Playgroud)

另外要注意的是,我们的结果页使用o:viewparam接收如下参数:

    <f:metadata>
        <o:viewParam name="id" value="#{legalHoldForm.legalHold}" required="false" />
        <f:event type="preInvokeAction" listener="#{controller.initializeViewLegalHold}" />
   </f:metadata>
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

  1. 为什么删除“ include-view-params”使其起作用?
  2. 这是与最近的ViewScoped问题类似的错误吗?:https : …

primefaces omnifaces jsf-2.2

4
推荐指数
1
解决办法
161
查看次数

FullAjaxExceptionHandler不会在ajax按钮上显示会话过期错误页面

我已经实现了Omnifaces FullAjaxExceptionHandler,但问题是它无法使用ajax请求.会话到期后,当我点击非ajax按钮时,它运作良好.它将用户重定向到自定义错误页面.但是如果按钮使用ajax,它什么都不做.页面只是卡住了.

编辑:我已将ActionListener更改为Action并仍然相同.

Edit2:它没有错误.既不是Apache Tomcat输出也不是Apache Tomcat Log.

在此输入图像描述

这是我的春天安全;

<http auto-config='true' use-expressions="true">
    <intercept-url pattern="/login" access="permitAll"/>
    <intercept-url pattern="/ajaxErrorPage" access="permitAll"/>
    <intercept-url pattern="/pages/*" access="hasRole('admin')" />
    <intercept-url pattern="/j_spring_security_check" access="permitAll"/>        
    <logout logout-success-url="/login.xhtml" />
    <form-login login-page="/login.xhtml"
                login-processing-url="/j_spring_security_check"                                                       
                default-target-url="/pages/index.xhtml"
                always-use-default-target="true"                                                        
                authentication-failure-url="/login.xhtml"/>
</http>
Run Code Online (Sandbox Code Playgroud)

jsf jsf-2 omnifaces

3
推荐指数
1
解决办法
2127
查看次数