JSF2 Web应用程序中可能的Scope问题

时间:2014-01-28 14:39:51

标签: jsf jsf-2 spring-3 mojarra

我有一个使用SPRING3 + JSF2(mojarra 2.1.12)的JSF Web应用程序,我有一些问题,我认为可以在JSF2 +的一个组合中错误选择一个控制器的Scope primefaces接口。

此组合功能允许用户选择一个内部xhtml子页面和一个自动将您重定向到该页面的按钮。

网站使用模板技术:有模板(standard.xhtml)和JSF2代码,使用这个模板有几个页面:一个是主页的inicio.xhtml和一个联系页面(contacto.xhtml)。在两个页面中,组合都会正确显示。

以下代码只有在您在主页(incio.xhtml)中导航时才能正常工作,但是当您在网络的其他部分(即contacto.xhtml)时,它会显示包含所有选项的组合,但按钮根本不起作用。

这是我在standard.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"
       xml:lang="${userContext.locale}" lang="${userContext.locale}"
       xmlns:ui="http://java.sun.com/jsf/facelets"
       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:p="http://primefaces.org/ui"
       xmlns:sec="http://www.springframework.org/security/tags">
<f:view contentType="text/html">
       <h:head>
             //HEAD
       </h:head>
       <body>
             <div id="…">
                    <div id="…">

                           //CODE
                           //CODE to go from one page (inicio.xhtml) to other (contacto.xhtml)
                                  <li><h:commandLink value="${msg.app_menu_contacto}" action="mContacto" /></li>

                           //MORE CODE
                           <h:form>
                                  //MORE CODE
                                  <h:panelGrid id="buscar" columns="2" style="margin-top:20px;" cellpadding="5">
                                  <p:selectOneMenu id="selectBuscar" value="#{buscador.procedimiento}" panelStyle="width:150px;"  
                                         var="p" style="width:220px; margin-right: 10px; "  filter="true" filterMatchMode="startsWith">  
                                        <f:selectItem itemLabel="${msg.app_comun_seleccionar}" itemValue="" />  
                                        <f:selectItems value="#{buscador.procedimientos}" var="proc" itemLabel="#{proc.codigo}" itemValue="#{proc.valor}"/>
                                        </p:selectOneMenu>
                                              <p:commandButton id="btnIr" style="width:40px" value="#{msg.app_comun_btn_ir}" title="#{msg.app_comun_btn_ir_title}" 
                                                action="#{buscador.direccion}">
                                        </p:commandButton> 
                                  </h:panelGrid>
                                  </h:form>
                           </div>
                    </div>
       </body>
</f:view>
</html>

在faces-navigation.xml中我们有这些行(faces-navigation仅用于代码的几个继承部分):

<navigation-case>
<from-outcome>mContacto</from-outcome>
<to-view-id>/views/comun/contacto.xhtml</to-view-id>
<redirect />
</navigation-case> 

xhtml主页的代码:

<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
       xmlns:ui="http://java.sun.com/jsf/facelets"
       xmlns:h="http://java.sun.com/jsf/html"
       xmlns:f="http://java.sun.com/jsf/core"
       xmlns:fn="http://java.sun.com/jsp/jstl/functions"
       xmlns:c="http://java.sun.com/jsp/jstl/core"
       xmlns:p="http://primefaces.org/ui"
    xmlns:sec="http://www.springframework.org/security/tags"
       template="/WEB-INF/layouts/standard.xhtml">

//Code independent of the combo or button failing
// it uses ui:define to show different components in the page.

    </ui:composition>

这是控制器代码:

@Controller("buscador")
//@Scope(“Session”)  Do not work with “request”, “view” or without scope
public class BuscadorController implements Serializable {

       public List<ValorCombo> getProcedimientos() {
             //Code that returns a list of pair String to show in the combo, name of the xhtml page should be redirected
}

public String direccion() {
//CODE
String salida = "proc/"+procedimiento+"?faces-redirect=true";
//more CODE
return salida;
}

}

我试过这个,但它既不起作用。

http://balusc.blogspot.com.es/2011/09/communication-in-jsf-20.html

我该如何解决这个问题?

谢谢!

0 个答案:

没有答案