对矩阵使用selectBooleanCheckbox(在类型上找不到属性...)

时间:2018-08-06 19:50:11

标签: jsf jsf-2

我试图显示例如学生和老师。这种关系是布尔值,因此我决定为它们使用复选框h:selectBooleanCheckbox

<table>
  <thead>
    <tr>
      <th></th>
      <c:forEach items="#{myController.teachers}" var="t">
           <th>#{t.name}</th>
      </c:forEach>
    </tr>
  </thead>
  <tbody>
     <c:forEach items="#{myController.students}" var="s">
          <tr>
            <td>#{s.name}</td>
            <c:forEach items="#{myController.teachers}" var="t">
                <td>
                  <h:selectBooleanCheckbox value="#{myController.isLinked(s.name, t.name)}">
                    <f:ajax event="change" listener="#{myController.link(s.name, t.name)}" render="@this" />
                  </h:selectBooleanCheckbox>
                </td>
            </c:forEach>
          </tr>
       </c:forEach>
    </tbody>
 </table>

value是一个函数,它将告诉我两者是否相关,而listener是我要用来链接或取消链接的动作。

方法存在于myController中:

public boolean isLinked(String s, String t) {
   ....
public void link(String s, String t) {

我的第一个问题是打印出OK,isLinked被称为OK,但是当我单击其中一个复选框时,我得到一个错误:

  

serverError:类javax.faces.component.UpdateModelException   /page.xhtml @ 478,120   value =“#{myController.isLinked(s.name,t.name)}”:属性   在类型上找不到“ isLinked”   com.ex.myController $$ OwbNormalScopeProxy0

({myController@ViewScoped

在没有ajax的情况下,我没有出现任何错误,但是后面没有执行任何操作。我以不同的方式尝试过失败。

我的第二个问题是,这是否是JSF中最有效的方法,因为我可能有1000名学生和20名老师,所以这意味着大量的方法调用(以及用于检查链接的数据库调用)。对我来说,h:selectManyCheckbox的使用似乎无效。我曾考虑过将数据备份到Map上,以避免调用,但是也许我会消耗更多的内存,并且一旦页面加载就不会看到很大的性能提升。

编辑

第一个问题似乎是我误解了combobox元素,而value试图获取和设置。因此,设置时出现错误。我见过How to use <h:selectBooleanCheckbox> in <h:dataTable> or <ui:repeat> to select multiple items?解决了类似的问题,但并不完全相同。

0 个答案:

没有答案