Temperature SPOT - Part 6
Posted by mriem on August 29, 2007 at 11:00 PM EDT
The JSF component needs to be able to render, so you have to either deliver the renderer inline with the component or write a separate renderer. The code below describes the separate renderer.
package com.manorrock.jsf.sunspot.temperature; import java.io.DataInputStream; import java.io.IOException; import java.io.PrintStream; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketAddress; import java.net.SocketTimeoutException; import java.net.UnknownHostException; import java.text.MessageFormat; import java.util.ResourceBundle; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; import javax.faces.render.Renderer; /** * The JSF SunSPOT temperature renderer. * * @author Manfred Riem (mriem@manorrock.com) */ public class TemperatureRenderer extends Renderer { /** * Stores the bundle we use to get for rendering. */ private ResourceBundle bundle = ResourceBundle.getBundle("com.manorrock.jsf.sunspot.temperature.Bundle"); /** * Encode end. */ public void encodeEnd(FacesContext context, UIComponent component) throws IOException { ResponseWriter writer = context.getResponseWriter(); String value = null; TemperatureComponent temperatureComponent = (TemperatureComponent) component; String sunspotId = ""; if (temperatureComponent.getAttributes().get("sunspotId") != null) { sunspotId = (String) temperatureComponent.getAttributes().get("sunspotId"); } else if (temperatureComponent.getValueBinding("sunspotId") != null) { sunspotId = (String) temperatureComponent.getValueBinding("sunspotId").getValue(context); } else { value = "Set sunspotId please"; } if (value == null) { synchronized(context) { try { InetAddress address = InetAddress.getByName("localhost"); int port = 8888; SocketAddress sockaddress = new InetSocketAddress(address, port); Socket socket = new Socket(); int timeout = 2000; socket.connect(sockaddress, timeout); PrintStream printer = new PrintStream(socket.getOutputStream()); printer.println(sunspotId); printer.flush(); DataInputStream dataIn = new DataInputStream(socket.getInputStream()); value = dataIn.readLine(); } catch (UnknownHostException e) { e.printStackTrace(); value = e.getMessage(); } catch (SocketTimeoutException e) { e.printStackTrace(); value = e.getMessage(); } catch (IOException e) { e.printStackTrace(); value = e.getMessage(); } } } String html = MessageFormat.format( bundle.getString("temperature.text.renderer"), new Object[] { component.getClientId(context), value }); writer.write(html); } }
The last entry will be about some remaining bits and pieces.
Related Topics >>
Blog Links >>
- Login or register to post comments
- Printer-friendly version
- mriem's blog
- 441 reads





