2010-09-16 39 views
1

我XHTML代码:JSF2忽略行动attribut

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

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

是否有人有这样的问题?我甚至不能解释 - - 我的意思是这个行动方法就在那里!


ADD:是的,它是在一个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.在底部的形式,我已经放在啊:消息 我会尝试把我的控制器到viewScop检查3和4 我不知道如何检查5. 感谢您的..

回答

3

只是一个简单的问题:嵌套在里面<h:form><h:commandLink>

如果不是这种情况,你需要将你的命令链接包含在一个表单元素中,否则不起作用。

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

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

+1这是我的答案了。 – 2010-09-16 11:16:30

5

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

然而,有更多的原因:

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

  2. 验证或转换错误已发生,但未被h:message捕获。通常这会记录到标准输出,但您也可以使用h:messages来获取它们全部。

  3. UICommand组件被置于一个UIData组分(例如h:dataTable),其value后续请求期间不被保存以正确的方式内。如果JSF找不到关联的数据行,则不会调用该操作。把豆放在view的范围应该会有很大帮助。

  4. 组件或其父项之一具有rendereddisabled属性,该属性在应用请求值阶段期间评估false。那么JSF将不会调用这个动作。把豆放在view的范围应该会有很大帮助。

  5. 一些PhaseListenerEventListenerFilterServlet在请求 - 响应链已经改变JSF生命周期跳过调用动作阶段的或改变的所述请求参数,使得JSF不能调用动作。

0

不幸的是,我不知道mistae在哪里。我想这是关于错误的我的JSF代码。

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

感谢您有用的建议