立即= "true"和必填字段问题

  • 本文关键字:字段 问题 true 立即 jsf
  • 更新时间 :
  • 英文 :


我在使用immediate="true" (JSF 1.2)时遇到了一点麻烦。我的表单是关于车祸的:用户填写一些公共信息,然后他可以添加尽可能多的受影响的项目(树、栅栏、其他汽车等)

支持bean

private String location;
private List<T> items;
private HtmlDataTable itemsUI;
public void remove(ActionEvent e) {
    String id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id");
    items.remove(Integer.parseInt(id));
}   
public void add(ActionEvent e) throws InstantiationException, IllegalAccessException {
    items.add(element.newInstance());
}

JSPX

<h:inputText 
required="true"
value="#{ACC01.location}"/>
<h:dataTable
binding="#{ACC01.itemsUI }"
value="#{ACC01.items}"
var="item">
<h:column>
    <h:selectOneMenu
    value="#{item.id}>
        <f:selectItems  
        value="#{ACC01.possibleElements}" />
    </h:selectOneMenu>
    <h:commandLink 
    actionListener="#{ACC01.remove }"
    value="Remove"  >
        <f:param 
        name="id" 
        value="#{ACC01.itemsUI.rowIndex }"/>
    </h:commandLink>    
</h:column>
</h:dataTable>
<h:commandLink 
actionListener="#{ACC01.add}"
value="Add"  />

  • 如果我为dataTable中受影响的元素设置immediate="true",当用户添加一个新元素时,其他元素返回到它们的默认值(例如,如果你有{'tree', 'car', 'fence'}它们变成{'default', 'default', 'default', new element})

  • 如果我不使用immediate,受影响的元素保持正确的值,但用户必须在添加或删除受影响的元素之前填写'location'字段。

我想要的是能够保持受影响元素的值,并允许用户添加或删除它们,而不必首先填充'location'字段。

解决方案

在阅读了许多关于这个主题的文章之后,似乎唯一的方法就是避免自动验证,而在用户提交表单时手动验证。

检查必填字段是否为空,并以编程方式将错误消息附加到facescontext中。我真的不想那样做,因为我觉得那样很难看。

你能建议更好的方法来实现我需要的行为吗?

Thanks in advance

我目前工作的一位前开发人员提出了以下解决方案

JSPX

<h:inputText required="#{ACC01.saving}" value="#{ACC01.location}"/>
支持Bean

private UICommand btn;
public boolean isSaving()
{
    Map<?,?> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
    return (params.containsKey(btn.getClientId(ctx)));
}

在您的情况下可能不完全正确,但基本上他创建了从屏幕上的按钮到后台bean中的'btn'变量的绑定。然后,当单击btn时,inputText将只看到所需的位置文本。在你的例子中,它是一个命令链接,所以它可能有点不同,但我认为它可能会有所帮助。

相关内容

  • 没有找到相关文章

最新更新