标签: facelets

JSF 2:没有为错误页面呈现Facelets组合(模板)

我在Java EE 6应用程序服务器(GlassFish v3)中使用带有Facelets的JSF 2.0.我在web.xml中为异常配置了一个错误页面:

<error-page>
    <exception-type>java.lang.Throwable</exception-type>
    <location>/error-all.xhtml</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)

这是/error-all.xhtml测试页面:

<!DOCTYPE composition 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:ui="http://java.sun.com/jsf/facelets"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                template="/resources/templates/decorator.xhtml">

    <ui:define name="title">Title</ui:define>

    <ui:define name="body">
        <h1>Body</h1>
    </ui:define>
</ui:composition>
Run Code Online (Sandbox Code Playgroud)

我实现了一个托管bean,当我点击我的一个commandLinks时,它会故意抛出RuntimeException.当发生这种情况时,会显示/error-all.xhtml页面的内容,但它不会通过Facelets获取进程,因此不会应用template ="/ resources/templates/decorator.xhtml".

使用谷歌浏览器,我只看到"标题"和"正文",结果没有布局.如果我要求Chrome检查这些元素,我会得到完整的源代码,其中包括ui:compositionui:define标记,Chrome显然无法理解.这证实了我的理论,即Facelets页面没有被处理.

所以,我的问题是,如何解决这个问题?如何处理错误页面并返回HTML代码,该代码是模板与错误页面内容组合的结果?

java jsf facelets jsf-2

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

JSF - 关于生命周期的另一个问题

今天我想了解JSF生命周期的一些功能.让我开始吧:

1 - 阶段2:应用请求值 - 在此阶段,视图中的每个组件将在请求中搜索其值并将新值设置为它们

嗯,好的.因此,View将由于之前的Beans参数而构建.之后,有一个部分视图,使用请求值生成.(对吧?之后,在3°阶段,他们将进行比较).但是,例如,如果在创建最后一个视图期间缺少请求列表中的值?值将为null?

2 - 阶段5:调用应用程序 - 一旦将请求的所有值成功设置到辅助bean,将处理在应用请求值阶段排队的操作事件.在我们的例子中,提交按钮动作方法.

这根本不清楚.此时我(在bean上)从前一阶段更新的值(如果验证和应用请求未失败).好的,现在发生了什么?在处理申请请求值阶段期间排队的操作事件的含义什么?这意味着,例如,如果操作是提交,则该过程已完成?这就是为什么ajax调用,如果不在2°阶段呈现,将会失败?或者失败的地方?

3 - 阶段6:渲染响应 - 在此阶段,组件树将呈现给客户端.

这意味着使用更新的bean值更新服务器上的View?然后,在此之后,HTML代码是从此视图创建的?或者只是它制作了HTML代码并保存了View状态?

希望你能帮我 :)

jsf page-lifecycle facelets javabeans jsf-2

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

ViewScoped就像RequestScoped一样 - 为什么?

我编写了一个ViewScoped Managed-Bean,每当我在webbrowser中刷新页面时,Managed-Bean似乎都被重新创建,文章为null,它会加载一个新的文章对象,依此类推.对我来说,它看起来与RequestScoped的行为相同.

我将Eclipse IDE用于Java EE开发人员,最新的JDK,Apache Tomcat 7.0.8和Mojarra 2.0.3.

怎么了?

托管bean:

...
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
...
@ManagedBean
@ViewScoped
public class CreateArticle {

    @ManagedProperty(value = "#{index.facade}")
    private PersistenceFacade facade;
    private Article article;
    private Vector<ArtCategory> artcat;

    public CreateArticle() {
        artcat = ArtCategory.listArtCat();
    }

    @PostConstruct
    public void postCreateArticle() {
        if (article == null) {
            try {
                article = facade.createArticle();
            } catch (DAOException e) {
                e.printStackTrace();
            }
        }
    }

    public void setFacade(PersistenceFacade facade) {
        this.facade = …
Run Code Online (Sandbox Code Playgroud)

java jsf facelets jsf-2

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

如何使用ui重复+ h:inputText +托管bean在JSF中保存数组?

在postgres数据库中,我有一个表,其中包含一个int []字段.

在我的模型中,我有一个映射表的持久bean,包括int []字段.在本课程中,我已经实现了所有需要的setter/getter.

现在,我有一个托管bean,它也扮演控制器角色,并链接到模型bean.所以,在我的xhtml中我试图这样做:

<ui:repeat value="#{drawsetController.selected.editableBaseSetList}" var="baseNumber">
    <h:inputText value="#{baseNumber}"/>
</ui:repeat>
Run Code Online (Sandbox Code Playgroud)

baseSetList 是int []数组.

问题是,当我提交表单时,只有这个元素不会更新.初始化正在运行,getter被调用,但不是save,所以它必须是绑定的东西.长话短说,我试图用一个自定义类的ArrayList替换int []数组,它可以包装int(就像一个可写的Integer),但它不起作用.

也许这是重复不能正确绑定,我真的不知道.这是我经过多年的PHP :)后在java中的第一个项目.

jsf facelets uirepeat

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

有条件地在ui:composition标签中包含模板文件

我在我的jsf应用程序中使用facelets进行模板化.我想在ui:composition标签中有条件地包含一个模板文件.如果用户已登录,则模板必须为"authorized.xhtml",如果用户未登录,则模板必须为"unauthorized.xhtml".有办法吗?谢谢.

<ui:composition template="/templates/unauthorized.xhtml">
<ui:composition template="/templates/authorized.xhtml">
Run Code Online (Sandbox Code Playgroud)

我正在使用JSF 1.2.

jsf facelets

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

使用动态ui:include in ui:在NullPointerException中重复结果

我想通过使用<ui:repeat><p:dialog>使用创建动态对话框窗口<ui:include>.但是当我尝试下面的时候有一个例外.

main.xhtml

<p:outputPanel id="windowsPanel" layout="block" style="width:100%;">
    <p:outputPanel rendered="#{mainView.dynamicWindows ne null}">
        <ui:repeat var="item"  value="#{mainView.dynamicWindows}">
            <p:dialog binding="#{item.dialog}">
                <ui:include src="#{item.includedWindowPath}" />
            </p:dialog>
        </ui:repeat>
    </p:outputPanel>
</p:outputPanel>
Run Code Online (Sandbox Code Playgroud)

MainView.java

@ManagedBean(name = "mainView")
@SessionScoped
public class MainView extends BaseView {

private static final long serialVersionUID = -6291834350102049312L;

private List<Window> dynamicWindows;

@PostConstruct
public void init() {
    fillWindows();
}

private void fillWindows() {
    dynamicWindows = new ArrayList<Window>();

    for (int i = 0; i < 3; i++) {
        Window window = new Window("Header " …
Run Code Online (Sandbox Code Playgroud)

jsf facelets uirepeat uiinclude

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

JSF h标签没有显示

使用Netbeans在Glassfish 3.1.2.2上部署Web应用程序,并且我的h标签都不会显示在Web上.例如:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html">
    <head>
        <title>Draft Savvy Beers</title>
    </head>
    <h:form>
        <h:body>
            <h1>Search for beers</h1>
            <p><strong>Would you like to search for a beer?</strong>
                <h:inputText value="#{draftSavvyController.searchTerm}" />
                <h:commandButton value="#{draftSavvyController.searchforBeers}" /></p>
        </h:body>
    </h:form>
</html>
Run Code Online (Sandbox Code Playgroud)

仅显示文本,不显示输入字段或按钮.使用普通的旧HTML显然会显示字段和按钮,但我无法以这种方式访问​​我的控制器.这是我的web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>login.xhtml</welcome-file>
    </welcome-file-list>
</web-app>
Run Code Online (Sandbox Code Playgroud)

如果我能提供更多信息,请告诉我.我很陌生......

jsf facelets

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

JSF ui:包括未正确呈现

我正在使用JSF 2.1.8实现一个Web应用程序,我遇到了ui:include标记的问题.我有这个代码

<h:panelGroup id="panelContenido">

        <ui:fragment rendered="#{!empty navigationManagerSystem._Navegable}">
            <ui:include src="#{navigationManagerSystem._Navegable._IncludePath}" />

        </ui:fragment>
        <ui:fragment rendered="#{empty navigationManagerSystem._Navegable}">
            <ui:include src="/system/navigation/error.xhtml" />
        </ui:fragment>
    </h:panelGroup>
Run Code Online (Sandbox Code Playgroud)

navigationManagerSystem bean被JSF会话管理,在这一段代码首先呈现的,它应该是显示包括路径内容.如果我按照这样的常量执行此操作,<ui:include /system/home/index.xhtml" />但是如果我将它放在变量中则不行,即使我已经看到变量在屏幕打印之前保持该值.我不知道它是否能与持有/system/home/index.xhtml页豆,这是有关视图作用域.

无论如何,如果我在页面渲染后立即刷新页面,则正确包含xthml.顺便说一句,我已经简化了要包含的页面,以便没有任何jstl标签,因为我知道它们可能会导致View Scope出现问题.

有什么想法吗?

java facelets jsf-2

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

如何在验证失败时更改输入字段和标签的css类?

假设我有一个用户名来验证,在这种情况下,当验证失败时,我需要以红色显示用户名outputText和用户名inputText字段以及错误消息.

我试图在面板组中绑定所有这些,以便在验证失败时,所有字段都应该受到影响.但是简单地放置panelgroup是行不通的.

我的支持bean验证器

public void emailValidate(FacesContext context,
        UIComponent componentToValidate,
        Object value)
        throws ValidatorException {


    String email = value.toString();


    if (!Validator.isEmailAddress(email))
    {
        FacesMessage message =
                new FacesMessage(FacesMessage.SEVERITY_ERROR,"Email","Please enter valid email address");
                throw new ValidatorException(message);
    }


}
Run Code Online (Sandbox Code Playgroud)

我的Jsf

<h:panelGroup>
<h:outputText value="Email"/>
<h:message for="emailInput/>
<h:inputText id="emailInput" value="#{mybean.email}" validator="#{mybean.emailValidate}"/>
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)

css validation jsf facelets highlight

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

Primefaces DataTable - 使用对话框删除会删除错误的条目

我有一张表格.表中的一列显示一行按钮,用于编辑和删除表条目.当我删除一个条目时,从按钮的action属性中调用控制器,它按预期工作.

但是,一旦我添加了一个对话框让用户确认删除,就会删除错误的条目.它始终是当前表中的最后一个条目.我不知道原因是什么 - 我使用相同DataTable var的按钮和对话框.

我正在使用JSF 2(Mojarra 2.1.6)和Primefaces 3.5在Suse 12.2机器上部署JBoss 7.1.1.

表格:

<h:form id="downloads">
    <ui:include src="components/table.xhtml"/>
</h:form>
Run Code Online (Sandbox Code Playgroud)

桌子:

<ui:composition>

  <p:dataTable value="#{controller.currentLevelResources}"
            var="download" id="downloadTable" scrollHeight="120" rows="10">

    <p:column sortBy="#{download.name}">
        <f:facet name="header">Name</f:facet>
        <h:outputText id="downloadName" value="#{download.name}" title="#{download.description}" />
    </p:column>

            ...

    <p:column>
        <ui:include src="menuBar.xhtml"></ui:include>
    </p:column>
Run Code Online (Sandbox Code Playgroud)

菜单栏:

<ui:composition>

        <p:commandButton id="edit"
            action="#{downloadEditController.editResource(download)}"
            icon="ui-icon-gear" title="Edit" oncomplete="updateStyles()"
            update=":downloads" />

        <p:commandButton id="delete" onclick="deletedDlg.show();"
            icon="ui-icon-trash" title="Delete" oncomplete="updateStyles()" />

        <p:dialog header="Delete confirmation" widgetVar="deletedDlg"
            resizable="false">
            <h:panelGroup layout="block" style="padding:5px;">
                <h:outputText
                    value="The Resource #{download} will be deleted. Proceed?" />
            </h:panelGroup>
            <p:commandButton …
Run Code Online (Sandbox Code Playgroud)

jsf facelets java-ee primefaces jsf-2

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