2013-10-11 3 views
0

Я очень новичок в JSF и пытаюсь заставить его работать в течение последнего часа или около того.Исключение стека JSF или проблема с управляемым bean-компонентом

Эта примерная программа, над которой я работаю, должна отображать на ней веб-страницу с несколькими различными формами. Он делает это отлично (как в нем, по крайней мере, работает, я действительно не знаю, насколько корректен синтаксис), и теперь я реализовал некоторые функции в форме с помощью управляемого компонента. Цель состоит в том, чтобы страница отображала то, что пользователь вводил ниже, чтобы показать, что она прошла, но похоже, что есть какая-то проблема * * config.xml, которую я не могу понять, потому что проект, который я создал в netbeans не имеет никакого файла config.xml, у него есть только файл beans.xml и файл web.xml. Я не уверен, что (если что-либо) мне нужно добавить в файл beans.xml или мне нужно создать новый файл xml самостоятельно или это нечто совершенно другое.

Я должен также упомянуть, что, когда я запускаю эту программу, то GUI часть работает и я могу ввести вещи в коробки и проверьте радио коробку и такие, но когда я попал в «Регистрация» кнопка, ничего не происходит

Вот мои файлы.

index.xhtml

 <?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"> 
<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>Student Registration Form</title> 
    </h:head> 
    <h:body> 
    <h:form> 
     <!-- Use h:graphicImage --> 
     <h3>Student Registration Form 
     <h:graphicImage name="usIcon.gif" library="image"/> 
     </h3> 

     <!-- Use h:panelGrid --> 
     <h:panelGrid columns="6" style="color:green"> 
     <h:outputLabel value="Last Name"/> 
     <h:inputText id="lastNameInputText" 
        value="#{Registration.lastName}"/> 
     <h:outputLabel value="First Name" /> 
     <h:inputText id="firstNameInputText" 
        value="#{Registration.firstName}"/> 
     <h:outputLabel value="MI" /> 
     <h:inputText id="miInputText" size="1" 
        value="#{Registration.mi}"/> 
     </h:panelGrid> 

     <!-- Use radio buttons --> 
     <h:panelGrid columns="2"> 
     <h:outputLabel>Gender </h:outputLabel>   
     <h:selectOneRadio id="genderSelectOneRadio" 
          value="#{Registration.gender}"> 
      <f:selectItem itemValue="Male" 
         itemLabel="Male"/> 
      <f:selectItem itemValue="Female" 
         itemLabel="Female"/> 
     </h:selectOneRadio> 
     </h:panelGrid> 

     <!-- Use combo box and list --> 
     <h:panelGrid columns="4"> 
     <h:outputLabel value="Major "/> 
     <h:selectOneMenu id="majorSelectOneMenu" 
         value="#{Registration.major}"> 
      <f:selectItem itemValue="Computer Science"/> 
      <f:selectItem itemValue="Mathematics"/> 
     </h:selectOneMenu> 
     <h:outputLabel value="Minor "/> 
     <h:selectManyListbox id="minorSelectManyListbox" 
          value="#{Registration.minor}"> 
      <f:selectItem itemValue="Computer Science"/> 
      <f:selectItem itemValue="Mathematics"/> 
      <f:selectItem itemValue="English"/> 
     </h:selectManyListbox> 
     </h:panelGrid> 

     <!-- Use check boxes --> 
     <h:panelGrid columns="4"> 
     <h:outputLabel value="Hobby: "/> 
     <h:selectManyCheckbox id="hobbySelectManyCheckbox" 
           value="#{Registration.hobby}"> 
      <f:selectItem itemValue="Tennis"/> 
      <f:selectItem itemValue="Golf"/> 
      <f:selectItem itemValue="Ping Pong"/> 
     </h:selectManyCheckbox> 
     </h:panelGrid> 

     <!-- Use text area --> 
     <h:panelGrid columns="1"> 
     <h:outputLabel>Remarks:</h:outputLabel> 
     <h:inputTextarea id="remarksInputTextarea" 
         style="width:400px; height:50px;" 
         value="#{Registration.remarks}"/> 
     </h:panelGrid> 

     <!-- Use command button --> 
     <h:commandButton value="Register" /> 
     <br /> 
     <h:outputText escape="false" style="color:red" 
        value="#{Registration.response}" /> 
    </h:form> 
    </h:body> 
</html> 

Registration.java

package jsf2demo; 

import javax.inject.Named; 
import javax.enterprise.context.RequestScoped; 
import javax.faces.bean.ManagedBean; 

@ManagedBean 
@javax.faces.bean.RequestScoped 

public class Registration { 
    private String lastName; 
    private String firstName; 
    private String mi; 
    private String gender; 
    private String major; 
    private String[] minor; 
    private String[] hobby; 
    private String remarks; 

    public String getLastName() { 
    return lastName; 
    } 

    public void setLastName(String lastName) { 
    this.lastName = lastName; 
    } 

    public String getFirstName() { 
    return firstName; 
    } 

    public void setFirstName(String firstName) { 
    this.firstName = firstName; 
    } 

    public String getMi() { 
    return mi; 
    } 

    public void setMi(String mi) { 
    this.mi = mi; 
    } 

    public String getGender() { 
    return gender; 
    } 

    public void setGender(String gender) { 
    this.gender = gender; 
    } 

    public String getMajor() { 
    return major; 
    } 

    public void setMajor(String major) { 
    this.major = major; 
    } 

    public String[] getMinor() { 
    return minor; 
    } 

    public void setMinor(String[] minor) { 
    this.minor = minor; 
    } 

    public String[] getHobby() { 
    return hobby; 
    } 

    public void setHobby(String[] hobby) { 
    this.hobby = hobby; 
    } 

    public String getRemarks() { 
    return remarks; 
    } 

    public void setRemarks(String remarks) { 
    this.remarks = remarks; 
    } 

    public String getResponse() { 
    if (lastName == null) 
     return ""; // Request has not been made 
    else { 
     String allMinor = ""; 
     for (String s: minor) { 
     allMinor += s + " "; 
     } 

     String allHobby = ""; 
     for (String s: hobby) { 
     allHobby += s + " "; 
     } 

     return "<p style=\"color:red\">You entered <br />" + 
     "Last Name: " + lastName + "<br />" + 
     "First Name: " + firstName + "<br />" + 
     "MI: " + mi + "<br />" + 
     "Gender: " + gender + "<br />" + 
     "Major: " + major + "<br />" + 
     "Minor: " + allMinor + "<br />" + 
     "Hobby: " + allHobby + "<br />" + 
     "Remarks: " + remarks + "</p>"; 
    } 
    } 
} 
+0

Ваша кнопка не имеет ни действия, ни ActionListener. Я думаю, вам придется привязать метод для запуска, когда пользователь нажимает кнопку. –

ответ

0

изменение Try:

@javax.faces.bean.RequestScoped 

в

@RequestScoped 

Для получения дополнительной информации вы можете найти ответ this @BalusC.

+1

Он оба импортирован, но он на самом деле * использует * аннотации Faces ('ManagedBean' и' RequestScoped'), поэтому он должен * быть в порядке, здесь, я думаю. Тем не менее, вероятно, лучше не импортировать их обоих, а устранить возможную двусмысленность. –

3

Одна из целей структуры JSF заключается в поддержке архитектуры «MVC», поэтому она обеспечивает так много технологий и технологий для разработки принципов MVC. Поэтому настоятельно не рекомендуется смешивать представление с уровнями контроллеров, поэтому вы должны отделяться между этими двумя уровнями, поскольку каждый уровень имеет свою особую роль. Во-первых, вы не должны добавлять/изменять любые другие XML-файлы, если используете версию JSF 2.X. Чтобы проиллюстрировать процесс регистрации в вашем примере, вы можете, например, показать заполненную регистрацию информацию на второй простой странице с именем result.xhtml. Сначала заменить метод getResponse(), просто response() с содержанием:

public String response(){ 
    return "result?faces-redirect=true"; 
} 

Результат строки при условии, с помощью метода выше, может быть записана просто return "result"; пор, адрес URI в строке браузера не будет изменен при пересылке к месту назначения стр. Иначе, если в строке (имя страницы) следует faces-redirect=true, как и в примере, то адрес URI будет изменен, а имя адресата будет отображаться также в строке адреса браузера.

Смотрите также:
Разница между экспедирования и перенаправлять в JSF: http://www.mkyong.com/jsf2/jsf-page-forward-vs-page-redirect/

Затем в index.xhtml, вы сделали <h:commandButton /> без action необходимый атрибут в вашем примере, так что вы должны заменить последнюю часть там :

<h:commandButton value="Register" style="color:red" action="#{Registration.response()}" /> 

И, конечно, вы должны также опустить последнюю <h:outputText /> тег в index.xhtml.

Наконец, создайте новую страницу result.xhtml показать регистрации информации:

<?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"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core"> 
<head> 
    <title>Registration informations</title> 
</head> 
<body> 

    <h2>Your registration informations :</h2> 

    <h:outputText value="Last name : #{Registration.lastName }" /><br /> 
    <h:outputText value="First name : #{Registration.firstName }" /><br /> 
    <h:outputText value="MI : #{Registration.mi}" /><br /> 
    ... 

</body> 
</html> 
+2

В целях обучения я бы опубликовал две реализации метода «response»: тот, который просто возвращает «результат», и другой, который возвращает «результат» faces-redirect = true »и объясняет различия между ними или указывает на ссылку, в которой это описано и объяснено. Кроме того, хороший ответ. –

+0

Вы правы. Сообщение отредактировано. Благодарю. – Omar

Смежные вопросы