Кажется, что значение действия JSF commandButtons игнорируется - перенаправляет на главную страницу - PullRequest
1 голос
/ 08 ноября 2011

У меня есть commandButton в JSF 2.0 с значением action, которое я хочу вызывать в бине, а в противном случае ничего не делать.Однако, когда я нажимаю на него, он перенаправляет на предыдущую страницу.

Это было запрограммировано в Java 1.7 в затмении с использованием glassfish 3.1.1.

Вот код для файла welcome.xhtmlгде commandButton (showDetails), но есть много других файлов, поэтому я включил ссылку на файл WAR, чтобы можно было все проверить.Если я изменю атрибут действия, чтобы указать на метод, который не существует, я не получу сообщение об ошибке, я снова буду перенаправлен на главную страницу.

Программа запускается из файла index.html.После импорта не забудьте щелкнуть левой кнопкой мыши по проекту, перейдите в свойства> фасеты проекта и отметьте JavaServerFaces 2.0

Соответствующий код:

welcome.xhtml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">

<h:head>
<title>Insert title here</title>
</h:head>

<h:body>
<h3>#{userBean.user.name}</h3>
<hr />
<form>
    <h:commandButton value="Back" action="index" />
</form>
<form>
    <h:commandButton value="Show details" action="#{userBean.changeRenderDetails}" />

    <h:panelGrid rendered="#{userBean.renderDetails}" columns="2">
        <h:outputText value="Brugernavn:" /> #{userBean.user.name}
        <h:outputText value="Password:" /> #{userBean.user.password}
    </h:panelGrid>

</form>
</h:body>
</html>

userBean

package model;

import java.io.Serializable;

import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named;

@Named("userBean")
// or @ManagedBean(name="user")
@SessionScoped
public class UserBean implements Serializable {

// Oprettes når en bean oprettes
private User user = new User("", "");

@Inject
// Det nuværende service objekt initialiseres automatisk
private Service service;

public String validateUser() {
    return service.validateUser(user);
}

public User getUser() {
    return user;
}

public void setUser(User user) {
    this.user = user;
}


//Lektion 10 - opg1

private boolean renderDetails;

public void changeRenderDetails(){
    setRenderDetails(!isRenderDetails());
}

public boolean isRenderDetails() {
    return renderDetails;
}

public void setRenderDetails(boolean renderDetails) {
    this.renderDetails = renderDetails;
}



}

и пользовательский класс

package model;

public class User {

private String name;
private String password;

public User(String name, String password) {
    super();
    this.name = name;
    this.password = password;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

}

правила навигации, ни одно из которых не должно иметь ничего общего с кнопкой, которая перенаправляет на index.html:

<?xml version="1.0" encoding="UTF-8"?>

<faces-config
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-facesconfig_2_0.xsd"
version="2.0">
<navigation-rule>
    <from-view-id>/index.xhtml</from-view-id>
    <navigation-case>
        <from-outcome>success</from-outcome>
        <to-view-id>/welcome.xhtml</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>failure</from-outcome>
        <to-view-id>/error.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>
</faces-config>

1 Ответ

2 голосов
/ 08 ноября 2011

Как показано в каждой приличной книге / учебнике JSF, вы должны использовать <h:form> вместо <form>.

<h:form>
    <h:commandButton value="Back" action="index" />
</h:form>
<h:form>
    <h:commandButton value="Show details" action="#{userBean.changeRenderDetails}" />
    <h:panelGrid rendered="#{userBean.renderDetails}" columns="2">
        <h:outputText value="Brugernavn:" /> #{userBean.user.name}
        <h:outputText value="Password:" /> #{userBean.user.password}
    </h:panelGrid>
</h:form>

См. Также

...