2013-11-07 1 views
1

Я довольно груб на стороне клиента, так что может быть, это очень простая проблема для того, кто более обоснован, чем я, в JSF (очень просто!: D), но я теряю голову из нескольких дней .. повезло просто в мое свободное время. Но мне нужна помощь в этой (мертвой) точке. Пожалуйста, помогите или я останусь всю ночь, приклеенную к клавиатуре!Не реагирует на JSF commandButton. Зачем?

Я создал страницу .xhtml с двумя формами, а второй указывает на Session Bean, который инициализирует объект для создания и перенаправления на страницу с формой, чтобы назначать значения своей переменной.

Это первая .xhtml страница:

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:p="http://primefaces.org/ui"> 
    <h:head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
     <title>Modify A Cafeteria Element</title>   
    </h:head> 
    <h:body> 

     <f:view> 
      <h:form> 
       <h1><h:outputText value="Modify A Cafeteria Element"/></h1> 
       <h:panelGrid columns="2"> 
        <h:outputLabel value="Description:" for="description" /> 
        <h:inputText id="description" value="#{cafeteriaElementBean.cafeteriaElement.description}" title="Description" />     

       </h:panelGrid> 

       <p:commandButton action="#{cafeteriaElementBean.saveOrEdit()}" value="Save" /> 
       <p:commandButton action="#{cafeteriaElementBean.edit()}" value="Edit" /> 
       <p:button outcome="cafeteriaElementList" value="Back" /> 
      </h:form> 
     </f:view> 
     <br/> 
     #{cafeteriaElementBean.cafeteriaElement.description} periodicity list: 
     <br/> 

     <f:view> 
      <h:form> 
       <h1><h:outputText value="List"/></h1> 
       <h:dataTable value="#{elementPeriodBean.filteredPerElement(cafeteriaElementBean.cafeteriaElement)}" var="item"> 
        <h:column> 
         <f:facet name="header"> 
          <h:outputText value="MaxAbsoluteForPeriod"/> 
         </f:facet> 
         <h:outputText value="#{item.maxAbsoluteForPeriod}"/> 
        </h:column>     
        <!-- code omissed for brevity--> 
       </h:dataTable> 

       <p:commandButton action="#{elementPeriodBean.create(cafeteriaElementBean.cafeteriaElement)}" value="Add a new Periodicity"/> 

      </h:form> 
     </f:view> 



    </h:body> 
</html> 

Это трафаретная печать его enter image description here

Clickin на «новой периодичности» кнопки привод ни к чему: отладчик смысл его это не распространяется , серверный терминал ничего не пишет. Ни браузер не перенаправляется на вторую страницу. :(

Session Bean является следующим: (с некоторыми порезами)

package com.cafeteria.business; 

import com.cafeteria.facades.ElementPeriodFacade; 
import com.cafeteria.model.CafeteriaElement; 
import java.util.List; 
import javax.inject.Inject; 
import javax.inject.Named; 
import com.cafeteria.model.ElementPeriod; 
import java.io.Serializable; 
import javax.enterprise.context.SessionScoped; 

@Named 
@SessionScoped 
public class ElementPeriodBean implements Serializable, CRUD <ElementPeriod>{ 

    private ElementPeriod elementPeriod; 

    @Inject 
    ElementPeriodFacade elementPeriodFacade; 

    public List <ElementPeriod> getAll(){ 
     return elementPeriodFacade.findAll(); 
    } 

    public List <ElementPeriod> filteredPerElement(CafeteriaElement cafeteriaElement){ 
     return elementPeriodFacade.findForElement(cafeteriaElement); 
    } 

    public String create(){ 
     this.elementPeriod = new ElementPeriod(); 
     return "newElementPeriod"; 
    } 

    public String create(CafeteriaElement cafeteriaElement){ 
     this.elementPeriod = new ElementPeriod(); 
     this.elementPeriod.setCafeteriaElement(cafeteriaElement); 
     return "newElementPeriod"; 
    } 

    public String modify(ElementPeriod elementPeriod){ 
     this.elementPeriod = elementPeriod; 
     return "newElementPeriod"; 
    } 

    public String saveOrEdit(){ 
     elementPeriodFacade.create(elementPeriod); 
     return "editCafeteriaElement"; 
    } 

     public String edit(){ 
     elementPeriodFacade.edit(elementPeriod); 
     return "editCafeteriaElement"; 
    } 

    public String remove(ElementPeriod elementPeriod){ 
     elementPeriodFacade.remove(elementPeriod); 
     return "editCafeteriaElement"; 
    } 

    public ElementPeriod find(Long id){ 
     return elementPeriodFacade.find(id); 
    } 

    public ElementPeriod getElementPeriod() { 
     if(this.elementPeriod== null) this.elementPeriod = new ElementPeriod(); 
     return this.elementPeriod; 
    } 

    public void setElementPeriod(ElementPeriod elementPeriod) { 
     this.elementPeriod = elementPeriod; 
    } 
} 

И это страница Формы для вставки данных:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- 
To change this template, choose Tools | Templates 
and open the template in the editor. 
--> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:p="http://primefaces.org/ui"> 
    <h:head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
     <title>Create periodicity for Cafeteria Element</title>   
    </h:head> 
    <h:body> 

     <f:view> 
      <h:form> 
       <h1><h:outputText value="Create/Edit Periodicity for #{cafeteriaElementBean.cafeteriaElement.description}"/></h1> 

       <h:panelGrid columns="2">     
        <h:outputLabel value="Periodicity:" for="periodicity" /> 
        <h:selectOneMenu id="periodicity" value="#{elementPeriodBean.elementPeriod.periodicity}" title="Periodicity" > 
         <!-- TODO: update below reference to list of available items--> 
         <f:selectItems value="#{periodicityBeam.all}"/> 
        </h:selectOneMenu> 

        <h:outputLabel value="MaxAbsoluteForPeriod:" for="maxAbsoluteForPeriod" /> 
        <h:inputText id="maxAbsoluteForPeriod" value="#{elementPeriodBean.elementPeriod.maxAbsoluteForPeriod}" title="MaxAbsoluteForPeriod" /> 

        <h:outputLabel value="MaxPercentageForPeriod:" for="maxPercentageForPeriod" /> 
        <h:inputText id="maxPercentageForPeriod" value="#{elementPeriodBean.elementPeriod.maxPercentageForPeriod}" title="MaxPercentageForPeriod" /> 

        <h:outputLabel value="FixValue:" for="fixValue" /> 
        <h:inputText id="fixValue" value="#{elementPeriodBean.elementPeriod.fixValue}" title="FixValue" /> 
       </h:panelGrid> 

       <p:commandButton value="Save" action="#{elementPeriodBean.saveOrEdit()}"/> 

       <!--p:button outcome="editCafeteriaElement" value="Back" /--> 
      </h:form> 
     </f:view> 
    </h:body> 
</html> 

ПРИМЕЧАНИЕ: - newElementPeriod правильно указывает на первую страницу страницы здесь из faces-config.xml - newElemelPeriod.xhtml доступен, независимо от того, от браузера - другие кнопки работают: не везде, так как некоторые имеют аналогичное поведение, как этот

PLease help! Схожу с ума!

Спасибо заранее, Andrea

+0

, что проблема, которую вы получаете, является ли создать метод (). – kark

+0

Здесь есть много неправильных представлений. Я рекомендую остановиться здесь и попытаться понять основы JSF и CDI. Кроме того, если вы работаете с JSF 2.0 или JSF 2.1 и CDI, я рекомендую добавить OmniFaces, чтобы иметь возможность аннотации '@ ViewScoped' для CDI, но если вы работаете с JSF 2.2, вы можете использовать' @ViewScoped 'для ваших CDI-компонентов. –

+0

Кстати, чтобы обнаружить проблемы в коде JSF, добавьте '' внутри каждой формы, чтобы там отображались сообщения об ошибках, такие как преобразование, и вы (и будущие читатели) могли обнаружить причины, по которым это не сработало. –

ответ

-1

Почему вы пытаетесь дать создать метод параметра из сеанса областью действия фасоли? Попробуйте удалить параметр и ввести другой сеанс областью действия фасоли ...

+0

Это больше подходит как комментарий, чем ответ. Кроме того, это не решит проблему. Поскольку вы еще не можете оставлять комментарии, подождите, пока у вас будет не менее 50 респондентов, а затем опубликуйте комментарии, просящие больше информации или дающие советы, которые, по вашему мнению, не должны отвечать. –

+0

Ну, эти вещи решили множество проблем на кнопках и ссылках в моих веб-приложениях, потому что параметры не очень хорошо работали! Вы пытались его удалить? Почему вы избегаете этого, он не решит проблему ...? Я не считаю его продуктивным, чтобы уменьшить все ответы людей, которые пытаются помочь автору темы. – anm

+0

Потому что я сделал тест и работает с текущим кодом OP, поэтому проблема лежит где-то в другом месте. Я знаю, что он может иметь лучший дизайн (начиная с неправильного использования «@ SessionScoped»), но ваш вариант вообще не решает проблему. –

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