Простое выполнение JSF - PullRequest
1 голос
/ 27 марта 2012

Код, вставленный ниже, представляет собой простую программу JSF с идеей иметь командную кнопку (в JSP, компонент JSF), которая при нажатии должна отображать сообщение, написанное в управляемом компоненте, возвращаться и отображать сообщение вJSP.

**perfectJSP.jsp**

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="f"  uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h"  uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Test Page</title>
</head>
<body>
<f:view>
<h:form>
  <h:commandButton value="Click" actionListener="#{Test.clicked}"></h:commandButton>
</h:form>
</f:view>
<h3> This brings us to the end of the program </h3>
</body>
</html>

**Test**  (managed bean)
import javax.faces.event.*;
public class Test {
public void clicked(ActionEvent ae)
{
    System.out.println("This is from the bean class");
}
}

**web.xml**

<servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>
        javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
        <servlet-name>faces</servlet-name>
        <servlet-class>
        org.apache.myfaces.webapp.MyFacesServlet</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>
    <servlet-mapping>
        <servlet-name>faces</servlet-name>
        <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>faces</servlet-name>
        <url-pattern>*.faces</url-pattern>
    </servlet-mapping>

**faces-config.xml**


<faces-config>
<managed-bean>
<managed-bean-name>Test</managed-bean-name>
<managed-bean-class>Test</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
</faces-config>

JBoss - используемый сервер приложений.Невозможно понять, почему вывод не генерируется.

1 Ответ

1 голос
/ 27 марта 2012

Вы печатаете сообщение на стандартный вывод, который обычно заканчивается в журнале сервера. Это не заканчивается в ответе HTML, который клиент должен получить.

Если вы хотите отобразить какое-либо сообщение при отправке формы JSF, есть несколько способов:

  • Используйте FacesContext#addMessage() с <h:messages/>. Э.Г.

    <h:form>
        <h:commandButton value="Click" action="#{Test.clicked}" />
        <h:messages />
    </h:form>
    

    с

    public void clicked() {
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("This is from the bean class"));
    }
    
  • Условно отображать компонент всякий раз, когда сообщение доступно. Э.Г.

    <h:form>
        <h:commandButton value="Click" action="#{Test.clicked}" />
        <h:outputText value="#{Test.message}" rendered="#{not empty Test.message}" />
    </h:form>
    

    с

    private String message;
    
    public void clicked() {
        message = "This is from the bean class";
    }
    
    public String getMessage() {
        return message;
    }
    

Кроме того, ваш класс управляемых бинов отсутствует в пакете. Это абсолютно не рекомендуется. Классы Java, которые должны быть доступны другим классам Java, должны быть помещены в пакет.


Не связано с конкретной проблемой: вы работаете с JSP, который считается устаревшим со времени JSF 2.0 почти 2,5 года назад. JSP сменил Facelets. Убедитесь, что вы читаете последние книги и учебники JSF. Смотрите также нашу вики-страницу JSF .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...