首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将输入字段设置为复合组件中的可编辑

将输入字段设置为复合组件中的可编辑
EN

Stack Overflow用户
提问于 2013-02-27 22:36:58
回答 1查看 409关注 0票数 0

我有一个复合组件

代码语言:javascript
复制
       <co:interface>
            <co:attribute name="editAction"     required="false"  targets="edit"   method-signature="java.lang.String f()"/>
            <co:attribute name="saveAction"     required="false"  targets="save"   method-signature="java.lang.String f()"/>
            <co:attribute name="isBrowseModus"  required="true"/>
            <co:attribute name="user"           required="true"/>
            <co:attribute name="editListener"   targets="edit" method-signature="void f(javax.faces.event.ActionEvent)" />
            <co:actionSource name="save"/>
        </co:interface>
        <co:implementation>
............
        <p:inplace id="inpLand" editor="true" 
            toggleable="#{not cc.attrs.isBrowseModus}" 
            style="#{cc.attrs.isBrowseModus ? 'color: black' : 'color: blue'}">  
                <p:inputText value="#{cc.attrs.user.land}" label="text"/>  
        </p:inplace>  
...........
        <c:if test="#{cc.attrs.isBrowseModus}">
           <p:commandButton id="edit" value="#{msgs.co_userdata_button_edit}" icon="ui-icon-unlocked" actionListener="#{cc.attrs.editListener}"/>
        </c:if>

实际上,调用myData.xhtml的视图调用了这个复合组件:

代码语言:javascript
复制
    <h:form id="dataForm">  
        <mc:UserData user="#{dataBean.user}" 
               isBrowseModus="#{dataBean.browseModus}"
               saveAction="#{dataBean.save}" 
               editListener="#{dataBean.editActionListener}">
        </mc:UserData>   
    </h:form>  

我的目标是:在这个复合组件中,用户可以通过单击“编辑”按钮来更改任何用户数据。我更喜欢使用PRIMEFACES的内置标签。单击“编辑”按钮后,所有可更改的字段都应以蓝色显示(请参阅复合组件)。

我的问题是,我不知道如何将isBrowseModus标志(定义为cc-属性)更新为false。实际上,我是在editActionListener (在managedBean中定义)中这样做的,但不幸的是,没有任何结果。

从托管bean (DataBean)中提取:

代码语言:javascript
复制
....
    public boolean isBrowseModus() {
        return browseModus;
    }

    public void setBrowseModus(boolean browseModus) {
        this.browseModus = browseModus;
    }


    public void editActionListener(ActionEvent event) {
        browseModus = false;
        FacesContext.getCurrentInstance().renderResponse();
    }
....

我不太熟悉JSF,因为我从一个月以来就一直在使用JSF。也许有一个更方便的方法来实现这一结果。但不幸的是我不知道该怎么做。有人能帮我解决这个问题吗?

在此之前,非常感谢您。你好,博多

EN

回答 1

Stack Overflow用户

发布于 2013-02-28 01:33:36

布尔变量是通过数据传递的,cc.attrs.isBrowseModus与数据库中的browseModus无关。理想的解决方案是保持布尔对象,以便传递引用,但是由于Java中的布尔包装器也是不可变的,所以需要使用包含布尔值的东西,比如来自commons的MutableBoolean类。

代码语言:javascript
复制
<h:form id="dataForm">  
        <mc:UserData user="#{dataBean.user}" 
               isBrowseModus="#{dataBean.browseModus}"
               saveAction="#{dataBean.save}" 
               editListener="#{dataBean.editActionListener}">
        </mc:UserData>   
    </h:form>

...
 <p:inplace id="inpLand" editor="true" 
            toggleable="#{not cc.attrs.isBrowseModus.value}" 
            style="#{cc.attrs.isBrowseModus ? 'color: black' : 'color: blue'}">  
                <p:inputText value="#{cc.attrs.user.land}" label="text"/>  
        </p:inplace>  
...



....
MutableBoolean browseModus = new MutableBoolean();

    public MutableBoolean isBrowseModus() {
        return browseModus;
    }

    public void setBrowseModus(MutableBoolean browseModus) {
        this.browseModus = browseModus;
    }


    public void editActionListener(ActionEvent event) {
        browseModus.setValue(true);
        FacesContext.getCurrentInstance().renderResponse();
    }
....
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15123874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档