如何在GWT中构建类似JSP/JSF的UiBinder标记?

如何在GWT中构建类似JSP/JSF的UiBinder标记?,gwt,uibinder,Gwt,Uibinder,过去我广泛使用过JSP标记库、freemarker、tiles和JSF Facelets。与TagLib的使用类似,我是否可以在GWT UiBinder中执行以下操作: 1) 组合:在UiBinder中创建标记库(无java代码),并将标记包含到另一个UiBinder文件中 2) 继承:创建基本布局UiBinder文件(主布局)并覆盖子UiBinder文件中的特定内容区域? 3) 将客户端变量传递到UiBinder($(map.property)) 一般来说,我不确定UiBinder与其他模板库

过去我广泛使用过JSP标记库、freemarker、tiles和JSF Facelets。与TagLib的使用类似,我是否可以在GWT UiBinder中执行以下操作:

1) 组合:在UiBinder中创建标记库(无java代码),并将标记包含到另一个UiBinder文件中 2) 继承:创建基本布局UiBinder文件(主布局)并覆盖子UiBinder文件中的特定内容区域? 3) 将客户端变量传递到UiBinder($(map.property))


一般来说,我不确定UiBinder与其他模板库相比如何。

UiBinder不是一个模板工具。其思想是XML比Java更易于阅读和维护

UiRenderer(GWT2.5)和SafeHtmlTemplates是,但它们非常基本。他们只回答了你的第三点


GWT没有回答您的前两点。

要使用UiBinder在另一个页面中插入内容,请在同一个包中创建一个类
mypackage.Header
和一个文件
Header.ui.xml
。那么您的UiBinder持有者文件应该如下所示:

<ui:UiBinder 
    xmlns:ui='urn:ui:com.google.gwt.uibinder'
    xmlns:g='urn:import:com.google.gwt.user.client.ui'
    xmlns:my='urn:import:mypackage'>

  <g:HTMLPanel>
    <my:Header />
    <!-- other content  -->
  </g:HTMLPanel>
</ui:UiBinder>

首先,UiBinder是一个非常方便的工具,用于将UI与其行为分离。此外,它还有助于提高生产率(这是真的!)、可维护性和其他功能。
GWT中的UiBinder与JSF方法非常不同。此工具不是渲染工具。与JSF相反,它不包含任何循环或条件。它的标记中没有
if
语句,只有非常有限的表达式语言。所有的逻辑都在Java类中。这是正确的。类中的循环和条件语句比视图中的循环和条件语句更合理。

如果不能组合标记,UiBinder如何扩展和聚合/集成使用UiBinder构建的其他组件?用户是否必须构建一个单一的10000行xml文件?不,这是一个糟糕的做法,因为这样的结构很难维护。您可以创建一个UiBinder文档并将其包含在其他UiBinder文档中。在这里,您可以找到与JSF中的
ui:insert
的一些相似之处。@pritam:UiBinder是一个小部件的实现细节;组件化是关于构建小部件(可能使用UiBinder)并组装它们(可能使用UiBinder)。这正是我想要的。事实证明,gwt示例项目Mail具有演示上述内容的代码。那么,GWT是否根据命名约定自动计算出名称空间?是否有方法扩展UiBinder和相应的生成器类,在复合组件实现中添加自定义注释,如@UiData,并在UiBinder中公开它,如my:header data=“12343”?如果您知道如何在facelet JSF页面中为数据表、列表框等注入“值”,那么这就是我想要的。