# JSF Problem mit Action



## DeKa106 (8. Feb 2007)

Moin zusammen, 

ich hab da folgendes Problemchen. Bin dabei eine Anwendung zu schreiben die halt unter anderen daten einliest ausgibt und speichert ... bis jetzt klappt auch alles nur beim speichern hab ich ein probelm. Wnn ich den Button "speichern" klicke speichert er die änderungen zwar in der Oberfläche aber nicht in der datei. 
Wenn cih nun den Button mit einem immediate="true" versetze dann speichert er die dateiaber ohne Änderung ... woran kann es liegen das er ohne immediate die Änderungen in der Oberfläche speichert aber nichts mit der datei macht und mit immediate speichert er die datei aber ohne Änderung...

UIch versuchs mal "grafisch darzustellen"

*OHNE immediate:*

Datei:
test=hallo
test2=hallo2
test3=hall3 
...


Oberfläche:
test=hallo
test2=hallo2
test3=hall3 

Änderung:
test3=hall3aaaaaaaaaaaaaaaaa

[speichern Button betätigen]

Oberfläche:
test=hallo
test2=hallo2
test3=hall3aaaaaaaaaaaaaaaaa

Datei: 
test=hallo
test2=hallo2
test3=hall3 
...


*Mit immediate:*

Datei:
test=hallo
test2=hallo2
test3=hall3 
...


Oberfläche:
test=hallo
test2=hallo2
test3=hall3 

Änderung:
test3=hall3aaaaaaaaaaaaaaaaa

[speichern Button betätigen]

Oberfläche:
test=hallo
test2=hallo2
test3=hall3

Datei: 
test=hallo
test2=hallo2
test3=hall3 
...

Info: es wird allerdings in die datei geschrieben da die anordnung der Zeilen anders ist.




Prinzipiell schreibt er wenn immediate true ist die daten nur nicht das was geändert wurde sondern die originaldaten.

Weiss denn jemand woran das liegt, oder wie es richtig sein müste. Hoffe die erklärung war eindeutig


----------



## KSG9|sebastian (8. Feb 2007)

Mit meinem enormen Fachwissen kann ich dir als König der Hellseher sagen..

Ach ne falsch.. gib uns Code!
-Code der Methode welche die Datei schreiben soll
-Code der entsprechenden JSF Klasse


----------



## DeKa106 (8. Feb 2007)

ok du könig der hellseher:

Hier der Button in meiner seite:

```
<h:commandLink action="#{jrbeMainPageManager.saveFiles}" styleClass="BUTTON_DISC"><h:outputText value="Änderungen speichern"/></h:commandLink>
```
bzw.

```
<h:commandLink immediate="true" action="#{jrbeMainPageManager.saveFiles}" styleClass="BUTTON_DISC"><h:outputText value="Änderungen speichern"/></h:commandLink>
```

Hier die Methode die aufgerufen wird:


```
public void saveFiles()
    {
        logger.debug("safeFilesAufgerufen");
        
        String app = "gui";
        
        try
        {
	        JRBEFileReader fr = new JRBEFileReader();
	    
	        String folderName = jrbeContentDao.getFolderNative();
	        
	        logger.debug("NativerFolder: " + folderName);
	        	        
	        HashMap application = fr.listDir(new File(folderName));
	        
	        logger.debug(application.size() + " Applications in HashMap.");
	        
	        
	        logger.debug("Try to get Path for " + app);
	        HashMap FileMap = (HashMap)application.get(app);
	        logger.debug(FileMap.size() + " Languages for " + app);
	        Iterator it = FileMap.keySet().iterator(); 									
            
		    while (it.hasNext())
			{		        
		        String key = (String)it.next();		        		        
		        
		    	String fileToWrite = FileMap.get(key).toString();				// File in das geschrieben werden soll
		    	
		    	logger.debug("File for " + key + ": " + fileToWrite);

		    	I18nDTO dto = jrbeContentDao.getJRBEContentObject();

		    	HashMap contentMap = dto.getMapForLangguage(key);
		    	
		    	logger.debug(contentMap.size() + " entries for language "+key);
		    	
		    	logger.debug("Writing file");
		    	
		    	fw.writeLanguageFile(fileToWrite ,contentMap);
			}	        
	        
        } 
        catch (IOException e)
        {
            System.out.println("Schreib- Leseprobleme: " + e);
        }

    }
```


Und hier di WriteLanguageFile Methode die in die Dateien schreibt:


```
public void writeLanguageFile(String fileToWrite, HashMap contentToWrite)throws IOException
    {
        //System.out.println("Methode writeLanguageFile");
        FileOutputStream writeFile = new FileOutputStream(fileToWrite);
          
        Iterator it = contentToWrite.keySet().iterator(); 									
        
        while (it.hasNext())
		{
            String key = (String)it.next();
            //String line = contentToWrite.get(key)+"="+to.getValue()+"\r\n";
            JRBETranslationObject to = (JRBETranslationObject)contentToWrite.get(key);      
            
            String line = key+"="+to.getValue()+"\r\n";
            
    	    for (int i=0; i < line.length(); i++)
    	    {
    	        writeFile.write((byte)line.charAt(i));
    	    }
        }
        
        writeFile.close();
        System.out.println("Datei ist geschrieben!");
    }
```


Hoffe kannst was mit anfangen


----------

