0

I use the NetBeans tool generate a jsf form from entity(of coures,i am using JPA).I wanna get the form data from the jsf page,cose i don't know how to get the value of "#{readeredit.reader.tel}".my aim is to get the edit the data and post it from the form.and i get the default value from a get method.but i then find i can't get the value from the form. then the page xhtml code:

<h:body>
        <f:view>
            <h:form  >
                <h1><h:outputText value="读者信息编辑"/></h1>
                <h:panelGrid columns="2" > 
                    <h:outputLabel value="姓名:" for="name" />
                    <h:inputText id="name" value="#{readeredit.reader.name}" title="Name" />
                    <h:outputLabel value="性别:" for="sex" />
                    <h:inputText id="sex" value="#{readeredit.reader.sex}" title="Sex" />
                    <h:outputLabel value="学号:" for="barcode" />
                    <h:inputText id="barcode" value="#{readeredit.reader.barcode}" title="Barcode" />
                    <h:outputLabel value="密码:" for="pwd" />
                    <h:inputText id="pwd" value="#{readeredit.reader.pwd}" title="Pwd" />
                    <h:outputLabel value="职位:" for="vocation" />
                    <h:inputText id="vocation" value="#{readeredit.reader.vocation}" title="Vocation" />
                    <h:outputLabel value="生日:" for="birthday" />
                    <h:inputText id="birthday" value="#{readeredit.reader.birthday}" title="Birthday" >
                        <f:convertDateTime pattern="yyyy-MM-dd" />
                    </h:inputText>
                    <h:outputLabel value="电话:" for="tel" />
                    <h:inputText id="tel" value="#{readeredit.reader.tel}" title="Tel" />
                    <h:outputLabel value="Email:" for="email" />
                    <h:inputText id="email" value="#{readeredit.reader.email}" title="Email" />
                    <h:outputLabel value="备注:" for="remark" />
                    <h:inputTextarea rows="4" cols="30" id="remark" value="#{readeredit.reader.remark}" title="Remark" />
                </h:panelGrid>
                    <h:commandButton value="保存" action="#{readeredit.edit()}" />
            </h:form>
        </f:view>

    </h:body>

Generating jsf page needs a method returning entity.So i write this method, code is here:

public TbReader getReader() {
    String id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("tid");
    if (id != null && !id.isEmpty()) {
        this.typeid = id;
    }

reader = uecon.findTbReader(Integer.parseInt(typeid.trim()));
return reader;

}

and the whole codes of my jsf managed bean is here:

@Named(value = "readeredit")
@SessionScoped
public class readeredit implements Serializable {

    @Resource
    UserTransaction utx;
    @PersistenceUnit(unitName = "BMsPU")
    private EntityManagerFactory emf;
    TbReaderJpaController uecon;
    private String typeid;
    private TbReader reader;

    public TbReader setReader(TbReader reader) {
        this.reader = reader;
        return reader;
    }

    public String getTypeid() {
        return typeid;
    }

    public void setTypeid(String typeid) {
        this.typeid = typeid;
    }

    @PostConstruct
    public void init() {
        uecon = new TbReaderJpaController(utx, emf);
        this.setTypeid(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("tid"));
    }

    public TbReader getReader() {
        String id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("tid");
        if (id != null && !id.isEmpty()) {
            this.typeid = id;
        }
        reader = uecon.findTbReader(Integer.parseInt(typeid.trim()));
        return reader;
    }
    public String edit(TbReader rd) throws Exception {
        String id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("tid");
        if (id != null && !id.isEmpty()) {
            this.typeid = id;
        }
        try {
            TbReader editReader = new TbReader();
           editReader= this.setReader(getReader());
            editReader.setId(Integer.parseInt(typeid.trim()));
            uecon.edit(editReader);
            FacesMessage message = new FacesMessage("保存成功!");
            FacesContext.getCurrentInstance().addMessage(null, message);
        } catch (Exception e) {
            FacesMessage message = new FacesMessage("保存失败!");
            FacesContext.getCurrentInstance().addMessage(null, message);
        }
        return "reader";
    }
    public readeredit() {
    }

}

when I finnish editing the form data,i can hardly find a method to get the form value.Now i am confuing.Plz tell me.

Kukeltje
  • 12,223
  • 4
  • 24
  • 47
r0ad
  • 7
  • 4
  • I only change the outputlable's value and deleted some unused attribute.the class readeredit is to edit the form's data then insert the data into database.I use the get method to getreader() method to generate all of this values,and the inputtext has a default value cose i query them by the getreader() method.I usually get the jsf pages value by generating getter,setter and a var.but this "#{readeredit.reader.name}" has two layers,which confuing me.(#{readeredit.name} in normal,and i can get name's value by get method.) – r0ad May 17 '16 at 16:33
  • Don't worry, #{readeredit.reader.name} will call readeredit.getReader().getName() when showing page. And readeredit.getReader.setName(...) when submitting. So you just need to make sure getReader() does not return null – Jaqen H'ghar May 17 '16 at 17:15
  • Stop doing business logic in getter methods. You're returning a brand new entity on every `getReader()` method call. So every time JSF needs to set a submitted value, all previously set submitted values are lost this way. There are however more problems with this code. The duplicate shows a kickoff example of the correct approach. Rewrite your code based on it and advance. – BalusC May 17 '16 at 20:17
  • Thanks.I know I can get it through the getreader() method.But the data is the default value,not what I need in the form after editing.thanks anyway.@JaqenH'ghar – r0ad May 18 '16 at 10:57
  • @BalusC it's exactly what i need.thank you. – r0ad May 18 '16 at 10:58

0 Answers0