2011-05-26 12 views
6

में शामिल है मैं एक स्कूल प्रोजेक्ट पर काम कर रहा हूं और गतिशील यूई डालने के साथ एक समस्या का सामना करना पड़ा। मैं वर्तमान में जेएसएफ 2.0/प्राइमफेसेस 3 एम 1 में काम कर रहा हूं। मुख्य समस्या यह है कि मैं एक मेन्यूबार के माध्यम से बदलती गतिशील सामग्री के साथ प्राइमफ़ेस संवाद करना चाहता हूं।डायनामिक यूआई प्राइमफेस डायलॉग

संवाद घटक में एक ui है: एक प्रबंधित बीन संपत्ति में src set के साथ टैग शामिल करें। मेन्यूइटम्स बीन विधियों से जुड़े हुए हैं जो इस संपत्ति को बदलते हैं।

मुख्य समस्या यह है कि परिवर्तनीय बिल्कुल नहीं बदल रहा है, मैं वर्तमान में इस चर को दिखाने के लिए अलर्ट का उपयोग कर रहा हूं। वर्तमान में रिमोट कॉमांड के साथ काम कर रहा है लेकिन मैंने मेन्यूटेम घटक में एक्शन/एक्शनलिस्टर के साथ पहले ही कोशिश की है। किसी भी सहायता की सराहना की जाएगी।

मेनूबार और संवाद के साथ यह मुख्य पृष्ठ है।

<?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" 
    xmlns:p="http://primefaces.prime.com.tr/ui" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 
<h:head> 
    <title>KunstInHuis: Main</title> 
</h:head> 
<h:body style="font-size: 12px;"> 
    <h:form id="mainForm"> 
     <f:metadata> 
      <f:event type="preRenderView" listener="#{login.verifyAccess}"/> 
     </f:metadata> 
     <p:remoteCommand name="lazyANew" actionListener="#{main.goToAboNew}" onsuccess="alert('test')"/> 
     <p:remoteCommand name="lazyAList" actionListener="#{main.goToAboList}" onsuccess="alert('test')" /> 
     <p:remoteCommand name="lazyASearch" actionListener="#{main.goToAboSearch}" onsuccess="alert('test')" /> 
     <p:menubar autoSubmenuDisplay="true"> 
      <p:submenu label="Abonnementen"> 
       <p:menuitem value="Nieuw" onclick="lazyANew()" onsuccess="alert('#{main.goToPage}')"/> 
       <p:menuitem value="Lijst" onclick="lazyAList()" onsuccess="alert('#{main.goToPage}')" /> 
       <p:menuitem value="Zoek" onclick="lazyASearch()" onsuccess="alert('#{main.goToPage}')"/> 
      </p:submenu> 
      <p:submenu label="Klanten"> 
       <p:menuitem value="Nieuw" url="#" /> 
       <p:menuitem value="Lijst" url="#"/>    
      </p:submenu> 
      <p:submenu label="Kunstwerken"> 
       <p:menuitem value="Nieuw" url="#" /> 
       <p:menuitem value="Lijst" url="#"/>    
      </p:submenu> 
     </p:menubar> 
    </h:form> 
    <p:dialog id="mainDialog" header="Abonnement aanmaken" widgetVar="dlg0" minHeight="300" minWidth="450" 
       resizable="true" modal="false" > 
     <ui:include src="#{main.goToPage}" /> 
    </p:dialog> 
</h:body> 

और ये मेरे समर्थन सेम है।

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package com.page.beans; 

import java.io.Serializable; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 
import javax.faces.event.ActionEvent; 

/** 
* 
* @author wezlee 
*/ 
@ManagedBean(name = "main") 
@ViewScoped 
public class mainMenuBean implements Serializable { 
private boolean panelRender=false; 
private String goToPage = "./includes/forms/abboCreate.xhtml"; 

/** Creates a new instance of mainMenuBean */ 
public mainMenuBean() { 
} 
public void goToAboNew(ActionEvent e){ 
    goToPage="./includes/forms/abboCreate.xhtml"; 
} 
public void goToAboNew(){ 
    goToPage="./includes/forms/abboCreate.xhtml"; 
} 
public void goToAboList(ActionEvent e){ 
    goToPage="./includes/forms/abboList.xhtml"; 
} 
public void goToAboList(){ 
    goToPage="./includes/forms/abboList.xhtml"; 
} 
public void goToAboSearch(ActionEvent e){ 
    goToPage="./includes/forms/abboSearch.xhtml"; 
} 
public void goToAboSearch(){ 
    goToPage="./includes/forms/abboSearch.xhtml"; 
} 
/** 
* @return the goToPage 
*/ 
public String getGoToPage() { 
    return goToPage; 
} 

public void setGoToPage(String src){ 
    this.goToPage=src; 
} 
} 

उत्तर

1

असल में, मुझे लगता है कि बैकिंग वैल्यू को अपडेट करने के तरीके ठीक दिखते हैं जैसे वे ठीक काम करते हैं। मुद्दा शायद यह है कि आप इसे प्रदर्शित करने का प्रयास कैसे कर रहे हैं। जब पृष्ठ प्रारंभ में प्रस्तुत किया जाता है, तो goToPage के लिए मान का मूल्यांकन किया जाता है और उपयोगकर्ता के ब्राउज़र पर लौटाए गए पृष्ठ की सामग्री में रखा जाता है। एक बार यह मान उपयोगकर्ता के पक्ष में सेट हो जाने पर, यह बैकिंग बीन के साथ फिर से सिंक्रनाइज़ नहीं करेगा जब तक कि पृष्ठ के उस हिस्से को फिर से प्रस्तुत नहीं किया जाता है।

मेरा मानना ​​है कि एक प्रमुख चेहरे रिमोट कॉमांड आपको अपडेट = "क्लाइंट साइड आईडी" का उपयोग करके AJAX के साथ ऐसा करने की अनुमति देता है। हालांकि मैं एक प्रमुख चेहरे का लड़का नहीं हूं, इसलिए मैंने इस छोटे से परीक्षण को एक साथ रखा। सबसे पहले अपने remoteCommands बदलने के लिए:

<p:remoteCommand name="lazyANew" actionListener="#{main.goToAboNew}" update="testOutput" /> 
<p:remoteCommand name="lazyAList" actionListener="#{main.goToAboList}" update="testOutput" /> 
<p:remoteCommand name="lazyASearch" actionListener="#{main.goToAboSearch}" update="testOutput" /> 

फिर उपयुक्त आईडी के साथ अपने पेज की सामग्री के लिए एक सरल पाठ क्षेत्र जोड़ें:

Page target: <h:outputText value="#{main.goToPage}" id="testOutput" /> 

आपका आउटपुट पाठ सिंक्रनाइज़ करने शुरू कर देना चाहिए। जब तक यह काम करता है, आप बस testOutput से mainDialog पर अद्यतन को फिर से लक्षित कर सकते हैं और आपको व्यवसाय में होना चाहिए।

+0

धन्यवाद, मैंने सोचा कि रिमोट कमांड मुझे पूरे अपडेट सिस्टम को बाईपास करने देगी, अनुमान लगाओ कि मैं गलत था। मैंने अपने पैनल को किसी अन्य पैनल के अंदर गतिशील सामग्री के साथ डालने का प्रयास किया है, जिसे मैं अपडेट कर सकता हूं। लेकिन तब उत्पन्न होने वाली समस्या यह है कि मैं कुछ प्राइमफेस घटकों की कार्यक्षमता खो देता हूं, उदाहरण के लिए काम करना बंद कर देगा, जैसे अन्य घटक जैसे ऑटोकंपलेट, कमांडबूटन, आप इसे नाम दें। मैं वास्तव में महसूस करना शुरू कर रहा हूं जैसे मैं एक चट्टान और एक कठिन जगह के बीच फंस गया हूँ। – wezlee

संबंधित मुद्दे