当前位置: 首页 > 知识库问答 >
问题:

在JSF中使用链接设置可编辑/可注意区域?

钦侯林
2023-03-14

大家好,我是JSF-Hibernate的新手。我的数据库中有一个名为“Personels”的表,我使用一个函数从那里获取记录,并显示在“listallPersonels.xhtml”页面上。我在每个姓氏旁边都有一个链接,当点击它时,点击的行应该转到可编辑区域。我有布尔变量来保存每个记录的值。除了可编辑区域链接外,所有的东西都是工作的。点击它,什么都没有改变。“editable”的值不会从“false”变为“true”。我的代码在这里,问题出在哪里?谢谢...

My ManagedBean-PersonelMB;

@ManagedBean
@SessionScoped
public class PersonelMB implements Serializable{

/**
 * Creates a new instance of PersonelMB
 */
public PersonelMB() {
}
private int personelid;
private String personelname,personelsurname;

public int getPersonelid() {
    return personelid;
}

public void setPersonelid(int personelid) {
    this.personelid = personelid;
}

public String getPersonelname() {
    return personelname;
}

public void setPersonelname(String personelname) {
    this.personelname = personelname;
}

public String getPersonelsurname() {
    return personelsurname;
}

public void setPersonelsurname(String personelsurname) {
    this.personelsurname = personelsurname;
}



private NewHibernateUtil hu;
private Session s;
private Personels personel;
private List<Personels> plist;

public List<Personels> getAllPersonelsFromDatabase(){
    plist=new ArrayList<>();
    s=hu.getSessionFactory().openSession();
    s.beginTransaction();
    Query qu=s.createQuery("from Personels");
    plist=qu.list();
    s.getTransaction().commit();
    s.close();
    return plist;
}

public String addRecord(){
    Personels p=new Personels();
    p.setPersonelName(personelname);
    p.setPersonelSurname(personelsurname);
    s=hu.getSessionFactory().openSession();
    s.beginTransaction();
    s.save(p);
    s.getTransaction().commit();
    s.close();
    p=null;
    personelname="";
    personelsurname="";
    return "success";
}

public String editRecord(Personels p){
    p.setEditable(true);
    return null;
}

public String saveAlteration(Personels pr){
    for(Personels pers:mylist)
        pers.setEditable(false);

    s=hu.getSessionFactory().openSession();
    s.beginTransaction();
    s.update(pr);
    s.getTransaction().commit();
    s.close();
    return null;
}
public String deleteRecord(Personels p){
    s=hu.getSessionFactory().openSession();
    s.beginTransaction();
    s.delete(p);
    s.getTransaction().commit();
    s.close();
    return "deleted";
}
}

我的Java类-Personels.Java

public class Personels  implements java.io.Serializable {


 private Integer personelId;
 private String personelName;
 private String personelSurname;

public Personels() {
}

public Personels(String personelName, String personelSurname) {
   this.personelName = personelName;
   this.personelSurname = personelSurname;
}

public Integer getPersonelId() {
    return this.personelId;
}

public void setPersonelId(Integer personelİd) {
    this.personelId = personelİd;
}
public String getPersonelName() {
    return this.personelName;
}

public void setPersonelName(String personelName) {
    this.personelName = personelName;
}
public String getPersonelSurname() {
    return this.personelSurname;
}

public void setPersonelSurname(String personelSurname) {
    this.personelSurname = personelSurname;
}

boolean editable;

public boolean isEditable() {
    return editable;
}

public void setEditable(boolean editable) {
    this.editable = editable;
}

}
<h:form>
        <h:panelGrid columns="2">
            <f:facet name="Personel Register Form"/>
            <h:outputLabel value="NAME: "/>
            <h:inputText value="#{personelMB.personelname}"/>

            <h:outputLabel value="SURNAME: "/>
            <h:inputText value="#{personelMB.personelsurname}"/>
            <h:commandButton value="Reset" type="reset"/>
            <h:commandButton value="Save" type="submit"  action="#{personelMB.addRecord()}"/>
        </h:panelGrid>
        <h:commandLink value="List All Personels" action="listallpersonels.xhtml"/>
    </h:form>

我的ListallPersonels.xhtml;

<h:form>
    <h:dataTable value="#{personelMB.getAllPersonelsFromDatabase()}" var="p" >
        <h:column>
            <f:facet name="header">NAME</f:facet>
            <h:inputText value="#{p.personelName}" rendered="#{p.editable}" size="15"/>
            <h:outputText value="#{p.personelName}" rendered="#{not p.editable}"/>

        </h:column>

        <h:column>
            <f:facet name="header">SURNAME</f:facet>
            <h:outputText value="#{p.personelSurname}" rendered="#{not p.editable}"/>
            <h:inputText value="#{p.personelSurname}" rendered="#{p.editable}" size="15" />
        </h:column>

        <h:column>
            <f:facet name="header">DELETE</f:facet>
            <h:commandLink value="Delete" action="#{personelMB.deleteRecord(p)}"/>
        </h:column>

        <h:column>
            <f:facet name="header">EDIT</f:facet>
            <h:commandLink value="Edit" action="#{personelMB.editRecord(p)}" 
                                     rendered="#{not p.editable}"/>

            <h:commandButton value="Save Alteration" action="#{personelMB.saveAlteration(p)}"
                                     rendered="#{p.editable}" />
        </h:column>

    </h:dataTable>
</h:form>

共有1个答案

慕容劲
2023-03-14

你应该看看primefaces,它有一些特征。你应该找到一些答案来回答你的问题。

http://www.primefaces.org/showcase/ui/data/datatable/edit.xhtml

然后试试这样的方法

<p:dataTable value="#{personelMB.getAllPersonelsFromDatabase()}" var="p" editable="true" editMode="cell" widgetVar="cellP">
 类似资料:
  • 问题内容: 如果我想将cq5组件设置为在A页中可编辑但在B页中不可编辑,是否可以。 例如:在A页上,我有C组件,我们允许作者打开对话框并编辑该组件。但是我们不允许作者打开对话框来编辑页面B上的组件C。我尝试研究cq:EditConfig 链接,但这还不足以解决我的问题。 问题答案: 您可以在包含之前设置ComponentContext.BYPASS_COMPONENT_HANDLING_ON_IN

  • 问题内容: 我想控制基于树中级别的TreeTableView的某些行的样式。如果此行是Table根目录的第一级子级的一部分,则使用并应用样式。样式工作正常,但我也想禁用这些行的复选框。我能够,但是这也禁用了TreeItem的扩展,并且似乎没有任何作用。 编辑:据我了解,表必须设置为可编辑的,然后默认情况下列是可编辑的。但是,如果我设置了,否则我永远都看不到任何效果。setEditable的描述似乎

  • 背景 目前,我有一个解决方案,我在PDF中循环并在其中绘制黑色矩形。 所以我已经有了一个PDRectangle列表,它代表了我需要在pdf上填充/覆盖的正确区域,隐藏了我想要的所有文本。 问题所在 问题1:黑色矩形下方的文本很容易被复制、搜索或通过其他工具提取。 我通过展平我的pdf来解决这个问题(将其转换为图像,使其成为单层文档,黑色矩形不再被欺骗)。与此处描述的解决方案相同:使用pdfBox禁

  • 我试图在Symfony中设置一个区域设置,除了我试图在布局文件中翻译或生成路线的地方,一切都很好。我创建了一个侦听器,这样我就可以在每个请求上设置区域设置。 } 如果在树枝模板中,我试图使用app.session.get('_locale')访问会话变量,该变量存储了它应该是的语言环境-我得到了所需的结果。但是当我尝试app.request.locale我得到默认的语言环境,而不是在网址。正因为如

  • 是否可以使可单击但不可编辑。 我不希望它是可编辑的(键盘也不应该出现,我们也不应该改变提示) 实际上,我只想使用编辑文本作为带有提示的图像(不能更改)。我知道实际的方法是使用一个和一个,但我希望它尝试使用,因为这样我将只使用一个视图,而不是2个。而且每件事都是动态的,所以没有XML。 对于上述需求,XML中的解决方案是android:editable=“false”,但我想在Java中使用它。 但

  • 问题内容: 我正在使用创建时间选择器。内的文字是可编辑的。但我想将设置为不可编辑,因为有机会给出无效的值。谁能帮我? 问题答案: 请尝试以下操作: 只要您自己没有通过调用更改微调器编辑器,此方法就应该起作用。 告诉我们这是否有帮助。