2012-04-28 42 views
2

您如何解决这个常见问题?假设您需要根据某些Ajax事件(但不是整个表单)呈现少量表单元素,并且您不希望中断表单布局。 下面是示例代码在Ajax事件上呈现表单内容

<h:form> 
    <h:panelGrid columns="2"> 
     text1 
     <h:inputText value="asasd" /> 
     text2 
     <h:inputText value="asdasd" /> 
     <p:selectBooleanCheckbox value="#{bean.myBoolean}"> 
      <p:ajax update="someId" listener="{bean.changeValueOfMyBoolean"} /> 
     </p:selectBooleanCheckbox> 
     <h:outputText value="asdas"rendered="#{bean.myBoolean}" /> 
     <h:inputText value="bean value" rendered="#{bean.myBoolean"} /> 
     ...few more some elements 

所以,我看到的只有两个选择,把它们放在<h:panelGroup>,给所有的人一个ID,然后再创建<h:panelGrid>内(打破形式布局,因为新渲染的元素都会有不同的缩进)或给每个元素它是自己paneGroup与不同的ID一个然后在<p:ajax>使用像这样update=id1, id2, ...但这似乎并不像一个很好的解决方案。

那么你有什么方法,有没有更好的方法?

回答

1

要么你给所有你想要的更新要更新的ID或

你可以给所有相关组件的ID它有一个共同点,像

inputText1,inputText2,inputText3和像

然后在你的托管bean中有一个变量,它将返回所有这些元素的ID。

在ajax事件上,设置值(您可以使用正则表达式来获取视图中的所有id)。

但我认为这是围绕方式,因为这需要一趟服务器,而不是我将更新的id。

+0

第一种方法是我目前的方法,但我不希望每个元素都被'包围(因为您不能更新未呈现的元素)。第二种方法似乎是合理的,但必须有一个更清洁的解决方案:-) – 2012-04-28 16:44:39