2012-07-19 2 views
0

в этом случае я буду вставлять пустое/пустое значение для моей БД с jDev и используемым прикладным программным модулем ..Почему я не могу вставить значение null в jDeveloper adf?

это код в бобе:

public void insertM_LLOYDAGENT(ActionEvent actionEvent) { 
    // Add event code here... 
    UnderwritingAppModuleImpl am = (UnderwritingAppModuleImpl)ADFUtil.getApplicationModule("UnderwritingAppModuleDataControl"); 

    try{ 
     address = noteAddress.getValue().toString(); 
     city = noteCity.getValue().toString(); 
     contact = noteContact.getValue().toString(); 
     country = noteCountry.getValue().toString(); 
     name = noteName.getValue().toString(); 
     type = typeOfLloyd.getValue().toString(); 
     am.insertMLLOYDAGENT(address, city, contact, country, name, type); 
    } 
    catch(Exception ex){ 
     am.insertMLLOYDAGENT(address, city, contact, country, name, type); 
    } 
} 

и код в AppModuleImpl:

 public void insertMLLOYDAGENT(String noteAddress, String noteCity, String noteContact, String noteCountry, String noteName, String noteType){ 
    try { 
     System.out.println("tes ------- address = "+noteAddress+" city = "+noteCity+" contact = "+noteContact+" country = "+noteCountry+" name = "+noteName+" type = "+noteType); 
     MLloydagentViewImpl vo=(MLloydagentViewImpl)getMLloydagentView1(); 
     MLloydagentViewRowImpl row=(MLloydagentViewRowImpl)vo.getCurrentRow(); 
     row.setLloydName(noteName); 
     row.setLloydAddress(noteAddress); 
     row.setLloydCity(noteCity); 
     row.setLloydContact(noteContact); 
     row.setLloydCountry(noteCountry); 
     row.setTypeOfLloyd(noteType); 
     row.getDBTransaction().commit(); 
     vo.executeQuery(); 
    } catch (JboException ex) { 
     throw ex; 
    } 
} 

Почему новый ряд не занят? , пожалуйста, помогите мне. спасибо!

ответ

2

Код, который вы отправили, не вставляет новую строку, но обновляет текущую строку, если есть текущая строка.

MLloydagentViewRowImpl row=(MLloydagentViewRowImpl)vo.getCurrentRow(); 

, чтобы вставить новую строку, которую вы должны использовать что-то вроде

MLloydagentViewRowImpl row=(MLloydagentViewRowImpl)vo.createRow(); 
row.setLloydName(noteName); 
... 
vo.insertRow(row); 
... 

Однако вы боретесь рамки здесь. Сначала вы не должны совершать транзакцию в прикладном модуле, поскольку он совершает все изменения, внесенные вами с момента последнего коммита. Если вы повторно используете этот код в другом месте, у вас могут быть другие изменения, которые в настоящий момент не должны выполняться. Далее вы не должны использовать модуль приложения внутри компонента, так как это изменяет только слой модели, а слой связывания необходимо обновить вручную (самостоятельно). Предполагая, что у вас есть VO, используемое на вашей странице, должен быть итератор для этого объекта вида, присутствующего в файле pagedef. Затем вы должны получить доступ к привязке итератора и использовать его для вставки новой строки. Таким образом, связующий слой автоматически получает информацию о новой строке, а также обновляется слой модели. После вставки вы получаете привязку операции к операции фиксации и ее выполнение. Это сохранит ваши изменения во всех слоях. Вы должны закончить с чем-то вроде

public void xyz(ActionEvent actionEvent) 
{ 
    // Get the data from an ADF tree or table 
    DCBindingContainer dcBindings = 
     (DCBindingContainer) BindingContext.getCurrent().getCurrentBindingsEntry(); 
    // Get a attribute value of the current row of iterator 
    DCIteratorBinding iterBind = (DCIteratorBinding) dcBindings.get("testIterator"); 
    RowSetIterator lIterator = iterBind.getRowSetIterator(); 
    MLloydagentViewRowImpl row = (MLloydagentViewRowImpl) lIterator.createRow(); 
    row.setLloydName(noteName); 
    lIterator.insertRow(row); 
    // now commit the action 
    // get an Action or MethodAction 
    OperationBinding method = 
     BindingContext.getCurrent().getCurrentBindingsEntry().getOperationBinding("Commit"); 
    method.execute(); 
    List errors = method.getErrors(); 
    if (!errors.isEmpty()) 
    { 
     // an error occured so do something liek adding a mesage for the user 
     Exception e = (Exception) errors.get(0); 
     FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), ""); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
    } 
    // ok all is OK 
} 

Если у вас есть дополнительные вопросы, это поможет, если вы упоминаете вашу jdev версию.

Timo

+0

благодарит за внимание Тимо. Во-первых, я новичок в jdev .. так что я действительно запутался с каркасом. но, почему я не могу вставить строку с нулевым значением? – anombhayu

+0

Я думаю, что проблема - это атрибут TypeOfLloyd имеет ссылки с другой таблицей, и я всегда пытаюсь ввести значение null для этого атрибута. хахаха. Это моя ошибка. извините Timo – anombhayu

+0

Итак, на ваш вопрос ответили? –

Смежные вопросы