java - <h :commandButton> doesn't start the action - NO IDEA?

标签 java jsf richfaces

我正在尝试使用 dataModel 而不是绑定(bind) dataTable 并遇到了这个问题。在最后一列有一个 commandButton 应该用于从数据库中删除项目。但是当我按下它时,java 方法没有启动。

部分xhtml(精简代码):

<h:form>
<rich:extendedDataTable 
  id="table"
  var="fItem"  
  value="#{myFood.model}" 
  selectionMode="none">

 <rich:column width="150px">
  <f:facet name="header">Datum:</f:facet>
  <h:outputText value="#{fItem.date}"/>
 </rich:column>

 <rich:column>
    <h:commandButton id="save" action="#{myFood.delete}" value="delete"/>
 </rich:column>

 <f:facet name="footer">  
   <h:commandButton id="btnTest" action="#{myFood.test}" value="test"/>
 </f:facet>
</rich:extendedDataTable>
</h:form>

MyFood.java 的一部分:

public void delete()
{
  System.out.println("TEST");
  try 
  {
    DaoCrud.delete(model.getRowData(), 'P');
  } 
  catch (Exception e) {.....}
}

public void test()
{
  System.out.println("TEST");
}

但即使是“TEST”也没有写入控制台! 问题出在哪里?

更新:我已经更新了代码示例 (facet & test()),它可以工作。一切正常,直到我尝试使用 dataModel private DataModel<Item> model; ... 当我简单地将同一个 commandButton 移动到 facet 时,它就起作用了。

最佳答案

如果 bean 是请求范围的,那么您需要确保在 bean 的(后)构建表单提交请求期间创建了与显示初始表单期间相同的模型。

private List<Item> list;
private DataModel<Item> model;

@PostConstruct
public void init() {
    list = itemService.list();
    model = new ListDataModel<Item>(list);
}

JSF 将在应用请求值阶段迭代模型以确定按下的按钮,以便它可以在调用应用程序阶段被调用。

如果由于某些业务限制(例如缺少参数等)而在后续请求中保留模型并非微不足道,那么您需要通过将 bean 标记为 @ViewScoped 将其放入 View 范围内。而不是 @RequestScoped .这仅在您使用 JSF 2.0 时有效。

@ManagedBean
@ViewScoped
public class MyBean {}

或者,由于您使用的是 RichFaces,您还可以使用 <a4j:keepAlive> 为了这。将其放在与表单相同的页面中的某个位置:

<a4j:keepAlive beanName="#{myBean}" />

这实际上与 @ViewScoped 相同在 JSF 2.0 中执行。

关于java - <h :commandButton> doesn't start the action - NO IDEA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6121860/

相关文章:

java - 安卓游戏开发 : Draw menus with SurfaceView?

java - 我可以开发IP-messenger(LAN连接的计算机用户之间的消息/聊天)

css - 如何在 CSS 选择器中使用 JSF 生成的带有冒号 ":"的 HTML 元素 ID?

java - 将 Richfaces 添加到 Maven 项目

java - Android Studio - 从 Google Places Details API 电话号码解析 JSON,首次运行时给出 null

java - 以编程方式启动时 Appium 不会初始化驱动程序

JSF 在页面加载之前调用 bean 方法

java - 在 JSF 和 JPA 项目中使用 POJO 作为模型,对吗?

css - 风格 <丰富 :tooltip> to look like HTML title

jquery - 如何打开和关闭丰富的:popupPanel from the same link