2

我使用 Mojarra 2.1.3。

当用户单击“刷新不起作用”按钮时,它会刷新 ui:repeat 的内容。我希望复选框被选中,就像在初始化时一样。

我发现了什么:如果我在 facelet 中删除 h:head “刷新不起作用”工作......有什么想法吗?

小脸:

<h:head></h:head>
<h:body>
<h:form id="myForm" >
<h:panelGroup id="panelToRefreshOutsideRepeat">
  <ui:repeat value="#{sandbox.columns}" var="column">
     <h:panelGroup id="panelToRefreshInsideRepeat">
     <h2>composite onlyCheckbox:</h2>
     <trc:onlyCheckbox value="#{column.value}" />
     <br />
     <h2>composite onlyInputText:</h2>
     <trc:onlyInputText value="#{column.value}" />
     <br />
     <br/>
     <h:commandButton  value="Refresh don't work" >
        <f:ajax render="panelToRefreshInsideRepeat" />
     </h:commandButton>
     <h:commandButton  value="Refresh work" >
        <f:ajax render=":myForm:panelToRefreshOutsideRepeat" />
     </h:commandButton>
     </h:panelGroup>
     <br/> 
  </ui:repeat>
</h:panelGroup>

onlyCheckbox 和 onlyInputText 的组合:

<composite:interface>
<composite:attribute name="value" 
                     type="boolean"/> 
</composite:interface>
<composite:implementation>
boolean: <h:selectBooleanCheckbox value="#{cc.attrs.value}" />
<!-- for onlyInputText h:inputText instead of h:selectBooleanCheckbox -->
boolean value: #{cc.attrs.value}
</composite:implementation>

和支持bean:

@ManagedBean
@RequestScoped
public class Sandbox {
    public List<Column> columns = Arrays.asList(new Column(true));

    public List<Column> getColumns() {
      return columns;
    }        
    public void setColumns(List<Column> columns) {
    this.columns = columns;
    }

    public class Column {
       private boolean value;
       public Column(boolean value) {
          this.value = value;
       }
       public void setValue(boolean value) {
          this.value = value;
       }
       public boolean getValue() {
          return this.value;
       }
    }
}
4

1 回答 1

5

即使在最新的 Mojarra 2.1.4 上,我也可以重现您的问题。如果复选框不在复合材料中,则它可以正常工作。这是 Mojarra 中的一个错误<ui:repeat>。它在 Mojarra完全坏掉了。它在MyFaces 2.1.3上运行良好。

您有 2 个选项:

  • 用 MyFaces 替换 Mojarra。
  • 使用UIData组件代替<ui:repeat>, 例如<h:dataTable>, <t:dataList>,<p:dataList>等。
于 2011-11-13T15:36:42.717 回答