2011-11-09 64 views
3

在我们当前的原型中,大部分标准的HTML控件被一个applet取代,最重要的是表单提交由applet触发。JSF/Applet集成

有没有一种方法来调用服务器端几乎相同的方式执行相应的操作与

<h:commandButton action="#{ctrl.doit}"/>? 

本文Applet and JSF Integration - example有同样的问题,但没有一个合适的答案。从服务器的角度来看,applet是一种替代表单的形式。它填充专用(隐藏)字段并提交 - 不直接与服务器通信。

编辑

到目前为止,据我所知,这些集成的可能性:

  • 添加(隐藏)UICommand并通过JavaScript
  • 触发它
  • 实现自己的UICommand。据我所知,我会定义一个隐藏的参数来标记applet作为表单提交控件,在请求处理周期中,UICommand实现将找出并触发该操作。也许应该实现一个虚拟控件(与f:viewParam相比)作为MethodExpressions的端点。
  • 将侦听器附加到(随机)控件或更一般的事件侦听器,并在此处执行您的操作。在这种情况下,导航是如何完成的?
+0

分享你的代码将会很棒。显然,网络上没有很多Applet-JSF资源。问候, –

+1

这个applet集成归结为一个简单的JavaScript调用。获取JSObject.getWindow()并让它“评估”将单击隐藏的“确定”按钮的JavaScript。 – mtraut

回答

3

这是而不是可能没有物理JSF视图在嵌入applet的同一页中。所以,你应该至少有一个<h:form><h:commandButton>在同一页,如果有必要隐藏CSS display: none;。这仅仅是因为JSF需要在服务器端具有这种形式的视图状态,以防止类似于类似于攻击的类似于CSRF的攻击。如果在页面中有一个物理<h:form>对您来说不是问题(您的特定情况下似乎是这样),那么您可以让Applet填充字段(如果有)并单击表格中的按钮使用Applet-JavaScript通讯。

除此之外,一个简单的servlet或真正的Web服务API(如JAX-RS/JAX-WS)确实是最好的方法。 JSF是一个基于组件的MVC框架,而不是一个web服务框架。这就是我在这个链接问题中的答案是试图说明:使用正确的工具

+0

谢谢!无论如何,设计表单是必要的 - 我只是寻找一种方法来跳过隐藏的按钮。该小程序不用作web服务客户端。试想一下,它是一个奇特的按钮实现。我会在关于实施这种行为的问题上添加一些评论...... B.t.w - 你是一个非常出色的贡献者。你总是提供准确的答案,快速,支持和可理解的。简直太棒了。 – mtraut

+0

除了物理的'UICommand'组件,没有其他方法可以调用托管bean操作。然而,你可以滥用'valueChangeListener'或钩住一些setter方法,但这太糟糕了。 – BalusC

+0

对不起唠叨 - 我昨天通过编辑添加了这首赞美诗,但你已经回答了我的承诺。以防万一你错过了它:-) – mtraut