2008-11-26 25 views
7

Actualmente, mi empresa evalúa el desarrollo de un cliente de Java FAT. Debe admitir una GUI dinámica y tiene tanta lógica como sea posible en el lado del servidor. De ahí surgió la idea de enviar la pantalla como XML al cliente FAT, muestran al usuario y enviar los datos introducidos similares a "formulario html" de nuevo en una estructura como:Java GUI descrita en XML

<fields> 
    <field type="checkbox" name="active" checked="false" x="10" y="10" /> 
    <field type="textbox" name="username" value="dummy" x="10" y="30" /> 
    <field type="selection" name="group" selectedIndex="1" x="10" y="50"> 
    <data index="0">user</data> 
    <data index="1">admin</data> 
    </field> 
    <field type="button" name="ok" x="10" y="70" /> 
    <field type="button" name="cancel" x="10" y="90" /> 
</field> 

Antecedentes
El patrocinador está buscando una aplicación de entrada y revisión de datos que pueda adaptar a sus necesidades simplemente cambiando la configuración. Por lo tanto, debemos ofrecer a los administradores la posibilidad de diseñar las llamadas "pantallas" (también conocidas como formularios) y proporcionar un sistema cliente/servidor que les permita distribuirlos a sus usuarios finales. Los datos entrantes (es decir, los datos ingresados ​​por un usuario) se reenviarán a un motor de flujo de trabajo ya existente que maneja la lógica comercial.

Pregunta
¿Alguien ha desarrollado algo similar? ¿Qué bibliotecas sugerirías? Cualquier pro & contras? ¡Muchas gracias!

actualización
Muchas gracias por sus comentarios, Thinlet parece muy prometedor, así como JavaFX - Voy a mirar en ambas.

+0

creo que el término políticamente correcto es el cliente "grueso" :) – Draemon

+0

No, la gente se confunda eso con aspersiones de fundición de usuarios de su empresa; -} – ConcernedOfTunbridgeWells

Respuesta

2

La última vez que busqué tal cosa, dos opciones fueron Thinlet y Apache Jelly.

Los puntos positivos eran que podía separar el cableado y la construcción de su aplicación del comportamiento. No estoy seguro de la viabilidad de ninguno de ellos para hacer esto, pero supongo que podría ser ser alguna funcionalidad para traducir a otro kit de herramientas, tanto como Lazlo puede traducir a AJAX y Flash.

Antes de encontrar estos, había escrito un kit de herramientas similar (cuando Echo era la vanguardia, y Java 1.3 estaba desangrando), basado en el JHTMLEditor. Funcionó, pero los oyentes se estaban ejecutando en la misma VM que el renderizador.

Lo que hace ver el punto que hace @Draemon, en un contexto cliente/servidor, tendría que preguntar si esta es una manera fructífera de resolver el problema más grande. ¿Supongo que quiere descargar muchos ciclos de CPU en el cliente? Tal vez si agrega un poco más, podemos hacer más sugerencias? Esto apunta a un enfoque donde su aplicación se implementa en el escritorio como un servidor web localhost y sirve páginas a un navegador local.

Si puede esperar, yo esperaría y esperaría JavaFX, ya que esto hará que los applets de construcción sean mucho más declarativos, y también reducirá la descarga inicial de la biblioteca de renderizado.

2

"Debe admitir una GUI dinámica y tiene tanta lógica como sea posible en el lado del servidor".

Lo que estás describiendo es una aplicación web. El cliente ya está escrito (el navegador) y el formato XML (ish) es (X) HTML.

Sería posible recrear este proceso utilizando su propio formato XML y su propio cliente, pero no veo por qué es necesario o deseable.

+0

El problema es que tenemos que acceder con los dispositivos del cliente (es decir, impresora de facturas, lector de tarjetas) que es difícil de lograr a través de un navegador. – MrG

+0

impresoras de facturas y lectores de tarjetas tienen una GUI? – Powerlord

+0

¿no puedes usar un applet para acceder a los dispositivos del cliente? (con la configuración de seguridad correcta, por supuesto) – Draemon

0

Probar QT Jambi. Esto le permite crear diseños de formulario en QT Designer y exportarlos como un archivo descriptor del tipo que describió.

+0

Esto usa JNI. ¿Estaría disponible en algo así como una Mac? – jamesh

+0

Consulte la página web de Troll Tech. QT se ejecuta en Windows, Linux, OSX y algunos sabores diferentes de Unix. OTOH No sé si Jambi está disponible para OSX, pero el sitio web debería decir. – ConcernedOfTunbridgeWells

1

He hecho algo similar con SWT, aunque eso era convertir una estructura de datos lógica (en este caso, un modelo de formulario de solicitud) en una GUI, en lugar de especificar la GUI directamente. Esto nos permitió refactorizar la GUI dependiendo de las propiedades del cliente (PocketPC o Desktop) porque el modelo de datos era semántico en lugar de dictatorial sobre el diseño.

Escribir analizadores XML y generadores es simple. Escribir algo para generar una interfaz desde un modelo es menos simple, ya que necesita almacenar las relaciones entre los elementos de la GUI y los campos del modelo con los que se relacionan para poder actualizarlos cuando se realiza un cambio, en lugar del habitual escucha codificada en cada uno Elemento GUI.

1

Existen bastantes kits de herramientas basados ​​en XUL para una variedad de idiomas, incluido Java. Creo que Thinlet hace un XUL muy simplista para Java, pero debería haber otros.

1

Básicamente está enviando formularios serializados al cliente y serializando los datos resultantes. Esto podría hacerse con la serialización de Java, es decir, RMI, pero los firewalls y demás pueden complicar el uso de RMI en Internet.

Si desea utilizar XML sobre HTTP en el cable, puede echar un vistazo al java.beans.XMLEncoder. XMLEncoder está orientado hacia la serialización de los componentes de la interfaz de usuario, pero funciona igual de bien para serializar los POJO. Estos serían esencialmente los objetos modelo que se rellenan con la entrada del usuario en el cliente FAT.

1

Eche un vistazo al framework ofbiz. que utiliza los widgets (XML) ya través de los manipuladores de los abrigos a las salidas http://ofbiz.apache.org/