Problema com JSF não dispara action - to na fase do desespero

Pessoal to com um problema que é o seguinte eu tenho um JSF com um crud simples só que eu não sei porque , ele só funciona no escopo session, se alguém poder me ajudar eu agradeço.

Vou colocar os fontes que eu estou usando.

@ManagedBean(name="lessonBean")
@SessionScoped 
public class LessonBean extends BaseBean {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private List<Lesson> lessons;
	private Lesson lesson;
	private Course course;
	private boolean editMode;
	private Long idCourse;
	private Long id;
	@ManagedProperty("#{lessonService}")
	private LessonService lessonService;
	
	public Lesson getLesson() {
		return lesson;
	}
	public void setLesson(Lesson lesson) {
		Logger.error("setando o valor de curso!");
		this.lesson = lesson;
	}
	public Course getCourse() {
		return course;
	}
	public void setCourse(Course course) {
		this.course = course;
	}
	public boolean isEditMode() {
		return editMode;
	}
	public void setEditMode(boolean editMode) {
		Logger.error("estou tentando alterar editMode >> "+editMode);
		this.editMode = editMode;
	}
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		Logger.error("estou tentando alterar >> "+id);
		this.id = id;
	}
	public LessonService getLessonService() {
		return lessonService;
	}
	public void setLessonService(LessonService lessonService) {
		this.lessonService = lessonService;
	}
	public Long getIdCourse() {
		return idCourse;
	}
	public void setIdCourse(Long idCourse) {
		this.idCourse = idCourse;
	}
	
	public List<Lesson> getLessons() {
		return lessons;
	}
	public void setLessons(List<Lesson> lessons) {
		this.lessons = lessons;
	}
	
	public void salvar(){
		if(lesson != null){
			Course course = new Course();
			course.setId(idCourse);
			lesson.setCourse(course);
			lessonService.saveOrUpdateLesson(lesson);
			lesson = new Lesson();
			addInfoMessageFromKey("lessonSaved");
		}	
	}
	
	public void create(){
		Logger.error("estou tentando criar !");
		this.editMode = false;
		lesson = new Lesson();
	}
	
	public List<Lesson> findLessons() {
		if(course != null){
			lessons = lessonService.findAllByCourse(course);
		}
		
		return lessons;
	}
	
	public void deleteLesson(){
		Logger.error("entrei no delete!");
		lessonService.deleteLesson(lesson);
		addInfoMessageFromKey("lessonDeleted");
		lesson = new Lesson();
	}
	
	public void editLesson(){
		Logger.error("entrei no edit lesson");
		this.editMode = true;
		lesson = lessonService.findLesson(id);
	}
	
	public void handleFileUpload(FileUploadEvent event){
		Logger.error("entrou aqui para salvar o arquivo!");
		if(lesson != null){
			byte[] image =  event.getFile().getContents();
			lesson.setImage(image);
			Logger.error("entrou aqui para salvar o arquivo! e colocou a imagem >> "+event.getFile().getFileName());
		}
	}
	
}

Minha página jsf.

<?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:c="http://java.sun.com/jsp/jstl/core"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.org/ui">
<h:head>
	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
</h:head>
<ui:composition template="/templates/main.xhtml">
	<ui:define name="content">
		<h:body>
			<p:growl id="messages" showDetail="false"/>		
			<div id="menu-cursos">
			<div class="cognita-ui-menu-curso">
				<h:outputText value="#{tit.registerCourse}" />
			</div>
			<div>
			<h:form id="showformRegistrarCurso">
			<p:commandLink id="showFormRegCurso" action="#{courseBean.create()}" onclick="dlg.show()" style="padding-left:20px;" immediate="true">
				<div class="cognita-ui-icon cognita-ui-icon-new"></div>	
			</p:commandLink>
			</h:form>
			</div>
			<p:dialog header="#{tit.registerCourse}" 
					  widgetVar="dlg" 
					  resizable="false" 
					  modal="true"
					  >
				<h:form id="formRegisterCourse" >
					<h:panelGrid columns="2" style="margin-bottom:10px;">
							<h:outputLabel for="courseName" value="#{msgs.courseName}" />
							<h:inputText id="courseName" value="#{courseBean.course.name}" required="true" label="#{msgs.courseName}"/>			
					</h:panelGrid>
					
					<p:commandButton id="registerCourse" value="#{msgs.enter}"  
					update=":formShowCourses" 
					oncomplete="dlg.hide();" 
					action="#{courseBean.salvar()}" 
					ajax="false"
					/>
				</h:form>
			</p:dialog>
			
			<p:dialog header="#{tit.updateCourse}" 
					  widgetVar="dlgAlt" 
					  resizable="false" 
					  modal="true"
					  >
				<h:form id="formAlterarCurso" prependId="false">
					<h:panelGrid columns="2" style="margin-bottom:10px;">
							<h:outputLabel for="courseAltName" value="#{msgs.courseName}" />
							<h:inputText  id="courseAltName" value="#{courseBean.course.name}" required="true" label="#{msgs.courseName}"/>			
					</h:panelGrid>
					
					<p:commandButton id="updateCourse" value="#{msgs.enter}"  
					update=":formShowCourses" 
					oncomplete="dlgAlt.hide();" 
					action="#{courseBean.salvar()}" 
					ajax="false"
					/>
				</h:form>
			</p:dialog>
			<h:form id="formShowCourses">			
						<c:forEach items="#{courseBean.findCourses()}" var="course" >
							<div>
							<div id="cognita-ui-menu-curso" class="cognita-ui-menu-curso">
							<p:commandLink update=":formShowLessons" 
										   action="#{lessonBean.findLessons()}"
										   value="#{course.name}" 
										    >
								<f:setPropertyActionListener value="#{course}" target="#{lessonBean.course}" />		    
							</p:commandLink>
							</div>
							<p:commandLink action="#{courseBean.deleteCourse()}" 
										   onclick="if (!confirm('#{msgs.confirmDelete}')) return false"
										   ><div class="cognita-ui-icon cognita-ui-icon-delete"></div>
								<f:setPropertyActionListener value="#{course}" target="#{courseBean.course}" />
							</p:commandLink>
							<p:commandLink update=":formAlterarCurso" 
										   onclick="dlgAlt.show()" 
										   action="#{courseBean.editCourse()}" 
										    > <div class="cognita-ui-icon cognita-ui-icon-edit"></div>
								<f:setPropertyActionListener value="true" target="#{courseBean.editMode}" />
								<f:setPropertyActionListener value="#{course.id}" target="#{courseBean.id}" />
							</p:commandLink> <br/><br/>
							</div>
						</c:forEach>
			</h:form>
			</div>
			
			<div>
			<div class="cognita-ui-menu-curso">
				<h:outputText value="#{tit.registerLesson}" />
			</div>
			<div style="float:top;padding-bottom:15px; " >
			<h:form id="showformRegisterLesson">
			<p:commandLink id="showFormRegAula" 
						   action="#{lessonBean.create()}" 
						   onclick="dlgLesson.show()" 
						   style="padding-left:20px;" 
						   immediate="true">
				<div class="cognita-ui-icon cognita-ui-icon-new"></div>	
			</p:commandLink>
			</h:form>
			</div>
			
			<p:dialog header="#{tit.registerLesson}" 
					  widgetVar="dlgLesson" 
					  resizable="false" 
					  modal="true"
					  width="650"
					  >
				
				<h:form id="formRegisterLesson" enctype="multipart/form-data">
					<h:panelGrid columns="2" style="margin-bottom:10px">
							<h:outputLabel for="lessonName" value="#{msgs.name}" style="font-weight:bold"/>
							<h:inputText id="lessonName" value="#{lessonBean.lesson.name}" required="true" label="#{msgs.name}"/>
							<h:outputLabel for="description" value="#{msgs.description}" style="font-weight:bold"/>
							<p:inputTextarea id="description" 
											 value="#{lessonBean.lesson.description}" 
											 required="true" 
											 label="#{msgs.description}"
											 style="width:550px;height:55px;"
											 autoResize="true"
											 rows="6"
											 cols="20"
											 maxlength="400"
											 counter="counter"
											 counterTemplate="{0} characters remaining"
											 />
							&nbsp;				 
							<h:outputText id="counter" />											 
							<h:outputLabel for="image" value="#{msgs.image}" style="font-weight:bold"/>
							<p:fileUpload id="image" 
										  mode="advanced"
										  update="messageFile"	
										  auto="true" 
										  multiple="false" 
										  label="#{msgs.image}"
										  fileUploadListener="#{lessonBean.handleFileUpload}"
										  allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
										  />
							<h:outputLabel for="codVideo" value="#{msgs.idvideo}" style="font-weight:bold"/>
							<h:inputText id="codVideo" value="#{lessonBean.lesson.idVideo}" required="true" label="#{msgs.idvideo}"/>
							<h:outputLabel for="cbCourse" value="#{msgs.course}" style="font-weight:bold"/> 
					        <p:selectOneMenu id="cbCourse" value="#{lessonBean.idCourse}" required="true" label="#{msgs.course}" >  
				                <f:selectItem itemLabel="#{msgs.selectone}" itemValue="" />  
				                <f:selectItems value="#{courseBean.courses}" var="course" itemLabel="#{course.name}" itemValue="#{course.id}"/>  			se		
				            </p:selectOneMenu>
				            &nbsp;
							<p:growl id="messageFile" showDetail="false"/>			
					</h:panelGrid>
					
					<p:commandButton id="registerLesson" value="#{msgs.enter}"  
					update=":formShowLessons" action="#{lessonBean.salvar()}" ajax="false"/>
				</h:form>
			</p:dialog>
			
			<p:dialog header="#{tit.updateLesson}" 
					  widgetVar="dlgAltLesson" 
					  resizable="false" 
					  modal="true"
					  width="650">
			<h:form id="formUpdateLesson" enctype="multipart/form-data">
					<h:panelGrid columns="2" style="margin-bottom:10px">
							<h:outputLabel for="lessonName" value="#{msgs.name}" style="font-weight:bold"/>
							<h:inputText id="lessonName" value="#{lessonBean.lesson.name}" required="true" label="#{msgs.name}"/>
							<h:outputLabel for="description" value="#{msgs.description}" style="font-weight:bold"/>
							<p:inputTextarea id="description" 
											 value="#{lessonBean.lesson.description}" 
											 required="true" 
											 label="#{msgs.description}"
											 style="width:550px;height:55px;"
											 autoResize="true"
											 rows="6"
											 cols="20"
											 maxlength="400"
											 counter="counter"
											 counterTemplate="{0} characters remaining"
											 />
							&nbsp;				 
							<h:outputText id="counter" />											 
							<h:outputLabel for="image" value="#{msgs.image}" style="font-weight:bold"/>
							<p:fileUpload id="image" 
										  mode="advanced"
										  update="messageFile"	
										  auto="true" 
										  multiple="false" 
										  label="#{msgs.image}"
										  fileUploadListener="#{lessonBean.handleFileUpload}"
										  allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
										  />
							<h:outputLabel for="codVideo" value="#{msgs.idvideo}" style="font-weight:bold"/>
							<h:inputText id="codVideo" value="#{lessonBean.lesson.idVideo}" required="true" label="#{msgs.idvideo}"/>
							<h:outputLabel for="cbCourse" value="#{msgs.course}" style="font-weight:bold"/> 
					        <p:selectOneMenu id="cbCourse" value="#{lessonBean.idCourse}" required="true" label="#{msgs.course}" >  
				                <f:selectItem itemLabel="#{msgs.selectone}" itemValue="" />  
				                <f:selectItems value="#{courseBean.courses}" var="course" itemLabel="#{course.name}" itemValue="#{course.id}"/>  			se		
				            </p:selectOneMenu>
				            &nbsp;
							<p:growl id="messageFile" showDetail="false"/>			
					</h:panelGrid>
					
					<p:commandButton id="updateLesson" value="#{msgs.enter}"  
					update=":formShowLessons" action="#{lessonBean.salvar()}" ajax="false"/>
				</h:form>
			</p:dialog>
			</div>
			<div style="float:top;padding-bottom:2px;">
			
			<h:form id="formShowLessons" enctype="multipart/form-data" prependId="true">
				<div style="float:left;width:70%">
				<p:accordionPanel multiple="true" activeIndex="false">
					<c:forEach items="#{lessonBean.lessons}" var="lesson" >
						<p:tab title="#{lesson.name}" >
							<h:panelGrid columns="2" cellpadding="12" style="width:50px">
								<p:graphicImage cache="true" 
												value="#{imageBean.streamImage}" 
												style="width:100px;height:100px"
												>
									<f:param id="image_id" name="image_id" value="#{lesson.id}"/>
									<f:param id="course_id" name="course_id" value="#{lessonBean.course.id}"/>  
								</p:graphicImage>
								<p:inputTextarea value="#{lesson.description}" 
												 style="width:550px;height:80px;color:black"
												 autoResize="true"
												 rows="6"
												 cols="20"
												 maxlength="400"
												 disabled="true"
												 styleClass="textarea-no-border"			 
								/>
							</h:panelGrid>
						</p:tab>
					</c:forEach>		
				</p:accordionPanel>
				</div>
				<div style="float:left;width:80px;padding-top: 0px;padding-left: 0px;margin-top: 0px;margin-left:5px;">
				<c:forEach items="#{lessonBean.lessons}" var="lesson" >
						<p:commandLink update="formShowLessons"   action="#{lessonBean.deleteLesson()}" 
										   onclick="if (!confirm('#{msgs.confirmDelete}')) return false"
										   >
								<div class="cognita-ui-icon cognita-ui-icon-delete"></div>
								<f:setPropertyActionListener value="#{lesson}" target="#{lessonBean.lesson}" />
							</p:commandLink>
							<p:commandLink update=":formUpdateLesson" 
										   onclick="dlgAltLesson.show()" 
										   action="#{lessonBean.editLesson()}" 
										    > <div class="cognita-ui-icon cognita-ui-icon-edit"></div>
								<f:setPropertyActionListener value="true" target="#{lessonBean.editMode}" />
								<f:setPropertyActionListener value="#{lesson.id}" target="#{lessonBean.id}" />
							</p:commandLink> 
					</c:forEach>
					</div>
			</h:form>
			</div>
		</h:body>
	</ui:define>
</ui:composition>
</html>

Corrija essa droga de tópico que criou. Coloque os códigos dentro da tag [code]

++

Cara e na boa?

Precisa desse monte de código? Pq vc não edita, posta apenas o problema que você está tendo, no caso se aparece alguma exception e depois posta algum código que alguém pedir.

Desanima só de ver esse tanto de código e ainda por cima ñ formatado. [=

Ja acertei o problema é que eu não sei porque quando eu uso viewscoped minhas actions do metodo delete de lesson e update não funcionam e eu ná não tenho a minima idéia do porque que isso não funciona é tão desanimador que eu to pensando em até mudar de framework e parar de usar JSF, porque quanto mais eu mexo mais bug eu acho.

Ter mais de um h:form na página nunca é boa idéia…

[quote=loscaradk]Ja acertei o problema é que eu não sei porque quando eu uso viewscoped minhas actions do metodo delete de lesson e update não funcionam e eu ná não tenho a minima idéia do porque que isso não funciona é tão desanimador que eu to pensando em até mudar de framework e parar de usar JSF, porque quanto mais eu mexo mais bug eu acho.[/quote]Caso você conheça o outro framework mais eu te aconselho a mudar. [=
Não vale a pena você tentar mexer com JSF se você não entende seu funcionamento. [=

OBS.: editei para corrigir erro de português. Que deselegante… -_-’’

Bem lembrado,aliás eu diria que isso é o grande problema de quem mete o pau em JSF.

O Problema é que o código utilizado que não funcionando, está logo acima igualzinho e funciona, eu acho que é alguma questão de configuração, quanto a ter vários forms na página a especificação do JSF possibilita isso até onde eu li e não seria um problema, já que se eu precisar fazer algo mais rebuscado vou precisar ter várias ações…eu só queria entender porque ele não da o post pro bean ja que ta tudo certinho e não ta dando erro no programa, tem um warning por causa do graphicimage que ele fica mandando incluir um mime type no web.xml, mas procurei no google e nego diz que isso é problema do primefaces.

Oi Jake , obrigado pela ajuda, mas mudar agora ia ser meio doentio, porque eu ja consegui integrar tudo com o JPA, SPring e o Hibernate…, além do que os componentes facilitam na hora de criar os frufrus de tela, eu gostaria de saber se existe algum jeito de configurar para o JSF nãao ficar fazendo request pelo graphic:image toda hora, e se vocês usariam o mojarra ou o myfaces como implementação.

Cara coloca para debugar ai e nos fala a onde está dando erro, olhar para esse código deste tamanho e achar uma solução sem excessão fica dificil…

O problema é que não da erro, se desse erro seria mais fácil de resolver…

Vou tentar explicar melhor ok, este form chama um método que carrega o meu form formShowLessons até ai tudo bem, o problema é que neste meu form que é carregado são chamados duas ações , uma para apagar e outra pra atualizar, só que estes métodos quando eu uso @ViewScoped não são chamados, só são chamados quando eu uso @SessionScoped o que no meu ver não é o ideal, eu queria saber como eu forço a chamada do método porque ele fica dando post para carregar minha imagem do banco mas não da o post quando eu clico no commandLink abaixo.

<p:commandLink update=":formShowLessons" action="#{lessonBean.deleteLesson()}" onclick="if (!confirm('#{msgs.confirmDelete}')) return false" > <div class="cognita-ui-icon cognita-ui-icon-delete"></div> <f:setPropertyActionListener value="#{lesson}" target="#{lessonBean.lesson}" /> </p:commandLink>

<h:form id="formShowCourses"> <c:forEach items="#{courseBean.findCourses()}" var="course" > <div> <div id="cognita-ui-menu-curso" class="cognita-ui-menu-curso"> <p:commandLink update=":formShowLessons" action="#{lessonBean.findLessons()}" value="#{course.name}" > <f:setPropertyActionListener value="#{course}" target="#{lessonBean.course}" /> </p:commandLink> </div> </div> </c:forEach> </h:form> </div>

<h:form id="formShowLessons" enctype="multipart/form-data" prependId="true"> <div style="float:left;width:70%"> <p:accordionPanel multiple="true" activeIndex="false"> <c:forEach items="#{lessonBean.lessons}" var="lesson" > <p:tab title="#{lesson.name}" > <h:panelGrid columns="2" cellpadding="12" style="width:50px"> <p:graphicImage cache="true" value="#{imageBean.streamImage}" style="width:100px;height:100px" > <f:param id="image_id" name="image_id" value="#{lesson.id}"/> <f:param id="course_id" name="course_id" value="#{lessonBean.course.id}"/> </p:graphicImage> <p:inputTextarea value="#{lesson.description}" style="width:550px;height:80px;color:black" autoResize="true" rows="6" cols="20" maxlength="400" disabled="true" styleClass="textarea-no-border" /> </h:panelGrid> </p:tab> </c:forEach> </p:accordionPanel> </div> <div style="float:left;width:80px;padding-top: 0px;padding-left: 0px;margin-top: 0px;margin-left:5px;"> <c:forEach items="#{lessonBean.lessons}" var="lesson" > <p:commandLink update="formShowLessons" action="#{lessonBean.deleteLesson()}" onclick="if (!confirm('#{msgs.confirmDelete}')) return false" > <div class="cognita-ui-icon cognita-ui-icon-delete"></div> <f:setPropertyActionListener value="#{lesson}" target="#{lessonBean.lesson}" /> </p:commandLink> <p:commandLink update=":formUpdateLesson" onclick="dlgAltLesson.show()" action="#{lessonBean.editLesson()}" > <div class="cognita-ui-icon cognita-ui-icon-edit"></div> <f:setPropertyActionListener value="true" target="#{lessonBean.editMode}" /> <f:setPropertyActionListener value="#{lesson.id}" target="#{lessonBean.id}" /> </p:commandLink> </c:forEach> </div> </h:form>

ele da este warning sempre:

Jun 12, 2012 12:16:40 PM com.sun.faces.context.ExternalContextImpl getMimeType
WARNING: JSF1091: No mime type could be found for file dynamiccontent. To resolve this, add a mime-type mapping to the applications web.xml.

procurando no google eu achei que isto é um bug , eu queria saber se existe alguma solução conhecida pra isso, porque eu não estou conseguindo encontrar em lugar nenhum, grato pela ajuda!

EU RESOLVI O PROBLEMA!

se alguém tiver um problema pareciso é só tirar o forEach e colocar o loop no accordionPanel só isso fui!