2015-08-08 40 views
0

我在JSF 2.2中使用了JBoss AS/WildFly。 這是我的faces-config.xml文件的一個例子。從我的起始頁面(菜單頁面)的結果中,我想調用下一個,to-view-id使用EL。faces-config.xml:to-view-id中的表達式總是得到評估

<navigation-rule> 
    <from-view-id>/index.xhtml</from-view-id> 
    <!-- Sales --> 
    <navigation-case> 
     <from-outcome>AUFTRAGSSUCHE</from-outcome> 
     <to-view-id>#{salesOrders.start()}</to-view-id> 
    </navigation-case> 
    <navigation-case> 
     <from-outcome>AUFTRAGSERFASSUNG</from-outcome> 
     <to-view-id>#{salesOrderEntry.start()}</to-view-id> 
    </navigation-case> 
</navigation-rule> 

作品,但問題是,用戶選擇AUFTRAGSERFASSUNG的EL爲前,這裏只AUFTRAGSSUCHE得到評估的所有情況。雖然從結果是不同的。 實際上,導航案例的列表要長得多。如果用戶選擇開始最後一個輸入,則所有其他輸入都會被評估。意味着bean被實例化,...不是一個輕量級的東西。所以你可以感受到不同之處,第一個菜單項開始快速,最後一個菜單項非常慢。

爲什麼評估這些EL表達式? 我有機會關閉它嗎? 任何其他提示如何改善?

+0

我的第一個建議是(因爲你使用jsf 2.x)是使用隱式導航。 http://stackoverflow.com/questions/18037884/jsf-implicit-vs-explicit-navigation – Kukeltje

+0

你使用的是Jboss AS還是Wildfly? JBoss AS僅支持JSF 2.1。 – teacurran

+0

我使用的是使用JSF 2.2的WildFly 10。但舊版本顯示相同的效果。 – FrankL

回答

1

閱讀mojorra 2.2源代碼,很明顯,無論您觀察到的結果如何,to-view-id都會得到評估。否則無法配置它。

爲什麼el表達式在那裏呢?你正在做一些行動,然後返回視圖ID?

一個更好的辦法來做到這一點可能是使用一個視圖操作:

<navigation-rule> 
    <from-view-id>/index.xhtml</from-view-id> 
    <!-- Sales --> 
    <navigation-case> 
     <from-outcome>AUFTRAGSSUCHE</from-outcome> 
     <to-view-id>/sales-order/start.xhtml</to-view-id> 
    </navigation-case> 
</navigation-rule> 

然後在/sales-order/start.xhtml做到這一點:

<!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=" " 
     xmlns:f=" "> 
    <f:metadata> 
     <f:viewAction action="#{salesOrders.start}"/> 
    </f:metadata> 
    <h:head> 
     <title>Sales Order Start< /title> 
    </h:head> 
    <h:body> 
     <!-- Sales order page here --> 
    </h:body> 
</html> 

你只會有salesOrder.start()return void

+0

問題是,#{salesOrders.start()}返回開始的視圖的名稱。不僅用於執行某些邏輯。根據配置,第一個視圖可能會有所不同。 – FrankL

+0

爲什麼沒有index.xhtml調用帶有動作的命令鏈接,該動作可以返回您想要轉到的視圖?你不需要任何東西在你的faces-config.xml中。沒有起始行爲的導航案例是非常沒用的,因爲它會評估從view-id上採取的每個操作。 – teacurran