[英]Multiple pages in JSF not calling backing bean mutators
我目前正在为现有网站开发一个附加页面。 实际上,这部分并不那么重要-页面执行它自己的独立功能。
无论如何,最初,此“页面”由一个jpdl页面流控制的两个页面组成。 一切正常,除了引用第二页时。 用户将在字段中输入他们喜欢的任何内容,然后单击提交。 除未调用set方法外,其他所有功能均按预期运行。 尽管从Backing Bean中读取了现有值,但从未调用过setter。 我写了一些Seam测试,发现我可以制作自己的FacesRequest
,在相同的EL Expression上调用setValue()
,并且工作正常,这使我发现JSF方面存在问题。 仍然我从来没有想过,继续前进。 当然,现在我不得不回到它上面。
有问题的代码看起来像...(删除了不相关的部分。因为它们很笼统,并且在很多地方都在使用,所以存在很多问题):
@Name("user")
@Install(precedence = Install.DEPLOYMENT)
@Scope(ScopeType.CONVERSATION)
@AutoCreate
public class UserBean{
private String username;
public void setUsername(String username){this.username = username;}
public String getUsername(){return username;}
}
还有页面“ users.xhtml”的基本代码段...
<h:form id="modifyUsersForm">
<rich:panel>
<rich:dataTable id="userTable" value="#{users}" var="myUser">
<rich:column style="text-align:center">
<h:commandButton id="modifyButton" type="submit" value="Modify" action="modify">
<f:setPropertyActionListener target="#{user.id}" value="#{myUser.id}"/>
</h:commandButton>
</rich:column>
</rich:dataTable>
</rich:panel>
<s:button id="modifyUserCancelButton" value="Cancel" action="cancel"/>
</s:fragment>
</h:form>
users是扩展LinkedList<UserBean>
的bean。 基本要做的就是创建一个显示“修改”按钮的表
页面“ user.xhtml”的基本代码段...
<h:form id="modifyUserForm">
<rich:panel>
<h:inputText id="username" value="#{user.username}"/>
<div style="clear: both"/>
</rich:panel>
<s:button id="modifyUserCancelButton" value="Cancel" action="cancel"/>
<s:button id="modifyUserModifyButton" value="Modify" action="doModify"/>
</h:form>
的“ users.pageflow.jpdl.xml”
<pageflow-definition xmlns="http://jboss.com/products/seam/pageflow" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="users">
<start-page name="start" view-id="/users.xhtml" no-conversation-view-id="/users.xhtml">
<transition name="cancel" to="cancelled"/>
<transition name="retrieve" to="retrieve"/>
</start-page>
<decision name="retrieve_agent" expression="#{action.retrieve}">
<transition name="success" to="retrieved"/>
<transition name="failure" to="start"/>
</decision>
<page name="retrieved" view-id="/users.xhtml" no-conversation-view-id="/users.xhtml">
<transition name="modify" to="retrieve_user"/>
<transition name="cancel" to="cancelled"/>
</page>
<decision name="retrieve_user" expression="#{action.retrieveUser}">
<transition name="success" to="modify"/>
<transition name="failure" to="start"/>
</decision>
<page name="modify" view-id="/user.xhtml" no-conversation-view-id="/user.xhtml">
<transition name="cancel" to="cancelled"/>
<transition name="doModify" to="doModify"/>
</page>
<decision name="doModify" expression="#{action.modifyUser}">
<transition name="success" to="start"/>
<transition name="failure" to="modify"/>
</decision>
<page name="cancelled" view-id="/users.xhtml">
<end-conversation before-redirect="true"/>
<redirect/>
</page>
</pageflow-definition>
那我想念什么呢? 当成功在同一页面上调用getUsername时,为什么在JSF生命周期中没有在user.xhtml上调用setUsername? 我们正在使用Java 1.6.0_07,Seam 2.2.1,JSF 1.1(我相信,可能是1.2),并部署到JBoss 4.2.3中。
您是否尝试过h:commandButton
? s:button
执行GET,而不是POST。 也许那会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.