【问题标题】:JSF2 ignores Action attribut [duplicate]JSF2 忽略 Action 属性
【发布时间】:2011-04-13 03:59:26
【问题描述】:

我的 xhtml 代码:

<h:commandLink action="#{detailController.updateProject}" class="positive" >
 <h:graphicImage library="img" name="tick.png" alt=""/> 
 <h:outputText value="Save" />
</h:commandLink>

这个动作 (updateProject()) 不是从 JSF 框架调用的!即使我在 managedBean 中删除它也不会抛出异常。

还有其他人遇到过这样的问题吗?我什至无法解释-.-我的意思是这种行为方式存在!


添加:是的,它在 h:form 标签中!但是我在那个视图中有两种形式!可能是这个问题吗?


ADD2:我还应该提到,如果我按下按钮,它会让我回到之前的视图!所以我的操作方法被忽略了,而是打开了另一个视图?!?!

为了提供更多信息,我的页面是这样构建的:

panelGroup name=show rendered=!controller.edit
  form 
    buttons
    outputtext
  /form
/panelGroup

panelGroup name=edit rendered=controller.edit
   form
     buttons
     inputText
   /form
/panelGroup

所以我同时拥有,在一个文件中编辑和显示一个实体!但只有底部表单中的按钮显示了这种奇怪的行为(见上文)。


回答BalusC: 1.我使用两种形式(它们不是嵌套的!) 2. 在底部表格中我已经放置了一个 h:messages 我将尝试将我的控制器放入 viewScop 以检查 3 和 4 我不知道如何检查 5。 谢谢你。。

【问题讨论】:

    标签: jsf jsf-2


    【解决方案1】:

    这可能有很多可能的原因。 @romaintaz 只提到了最明显的一个(最常见的初学者错误):UICommand 组件必须放在 UIForm 组件内。

    还有更多原因:

    1. 您有多个嵌套表单。这在 HTML 中是非法的。该行为取决于所使用的网络浏览器,但通常该按钮不会执行任何操作。您可以不嵌套表单,但可以并行使用它们。

    2. 发生了验证或转换错误,h:message 未捕获该错误。通常这会记录到标准输出,但您也可以使用 h:messages 获取所有信息。

    3. UICommand 组件被放置在UIData 组件(例如h:dataTable)中,其value 在后续请求期间未被正确保留。如果 JSF 找不到关联的数据行,则不会调用该操作。将 bean 放入 view 范围应该会有很大帮助。

    4. 组件或其父组件之一具有rendereddisabled 属性,该属性在应用请求值阶段评估false。 JSF 将不会调用该操作。将 bean 放入 view 范围应该会有很大帮助。

    5. 请求-响应链中的一些 PhaseListenerEventListenerFilterServlet 已更改 JSF 生命周期以跳过调用操作阶段或更改请求参数以使 JSF 无法调用动作。

    【讨论】:

      【解决方案2】:

      只是一个简单的问题:您的 &lt;h:commandLink&gt; 是否嵌套在 &lt;h:form&gt; 中?

      如果不是这种情况,您必须将命令链接包含在表单元素中,否则它将不起作用。

      只是为了简化代码,你可以使用value属性而不是添加&lt;h:outputText&gt;组件:

      <h:commandLink action="#{detailController.updateProject}" class="positive" value="Save">
          <h:graphicImage library="img" name="tick.png" alt=""/> 
      </h:commandLink>
      

      【讨论】:

        【解决方案3】:

        不幸的是,我不知道迷雾在哪里。我猜是因为我的 JSF 代码错误。

        我通过简化代码解决了这个问题。从那个 xhtml 页面和那个控制器,我制作了 3 个 xhtml 页面和 3 个控制器。在重构所有这些之后,我的代码看起来更容易了,现在可以工作了:-)

        感谢您的有用建议

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-11
          • 2023-03-19
          • 2011-07-19
          相关资源
          最近更新 更多