JSF最佳实践:整个应用程序的一种形式或一些较小的形式?

时间:2013-05-21 09:37:47

标签: jsf

JSF中的最佳实践是什么,例如在模板中创建一个主<h:form>并将所有内容放在内部或为每个部分提供一些表单,例如,如果我们有两个逻辑代码块我们应该以两种不同的形式包装这些块的页面

1 个答案:

答案 0 :(得分:3)

这是一个过于宽泛的问题,它与JSF没什么关系。这是HTML理解和设计的问题。

如果你抽象掉所有JSF细节,你会发现渲染的组件是纯HTML <form>。要调用specification,表单为:

  

包含正常内容,标记,称为控件的特殊元素(复选框,单选按钮,菜单等)以及这些控件上的标签的文档部分。用户通常在将表单提交给代理进行处理(例如,到Web服务器,邮件服务器等)之前,通过修改其控件(输入文本,选择菜单项等)来“完成”表单。 p>

因此,最终整个表单将提交给服务器。对于基于组件的框架(如JSF),如果没有错误,组件的绑定值将使用提交的数据填充支持bean。

但是会提交哪些数据?表单中的所有数据。因此,如果您有一个全局表单,这意味着将收集所有不相关的信息:如用户凭据,产品选择,首选项选择等。它将一次性完成。最有可能它不会产生所需的功能,但会产生意想不到的结果。

存在混合关注点的问题:一个表单包含未设计为一起提交的非相关数据。这给我们留下了一种一种形式的每用户交互,例如一种用于用户身份验证/注销的表单,另一种用于存储用户偏好的表单,另一种用于保持产品选择的表单等。一种全局形式也可能会让您失望有嵌套形式的问题,花点时间搞清楚。

关于选择放置该表单的位置,它也取决于逻辑分离:如果您在每个页面上有用户登录/注销,它可以放在主模板中。每个视图表单可能会放在模板客户端中。此外,您会发现有时将它们并排放置以区分功能很方便。

此外,表单可能会改变预期的行为。最后一个例子:用户选择产品。考虑两种情况。

第一个:

<h:form>
    <ui:repeat value="#{bean.purchasedProducts}" var="product">
        <h:outputText value=#{product.name}/>
        <h:inputText value=#{product.quantity}/>
        <h:commandButton value="Change"/>
    </h:dataTable>
</h:form>

第二个:

<ui:repeat value="#{bean.purchasedProducts}" var="product">
    <h:form>
        <h:outputText value=#{product.name}/>
        <h:inputText value=#{product.quantity}/>
        <h:commandButton value="Change"/>
    </h:form>
</h:dataTable>

虽然第一个示例将更新所有产品,但第二个示例将仅更新相关产品

最后,没有“最佳实践”或“通用解决方案”。我认为在设计HTML文档时最好脱离关注点分离

而且,是的,我正在投票结束这个问题。