繁体   English   中英

JSF中的多个页面未调用后备bean更改器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM