Атрибут модели Spring не заполняет значения - PullRequest
0 голосов
/ 05 февраля 2012

У меня есть класс модели с некоторыми методами, большинство из них заполнены с использованием ajax (jquery), у меня есть атрибут модели на JSP как orderVo, изначально при загрузке страницы некоторые значения остаются пустыми, а когда я вызываю разные методы, они продолжают заполнение с помощью AJAX. Теперь проблема заключается в том, что при вызове 1 метода после настройки формы (1st GET) атрибут модели не заполняется значениями.

    @Controller
@RequestMapping("/order")
@SessionAttributes("orderViewVO")
public class OrderController {

    private static final Logger LOGGER = Logger
            .getLogger(OrderController.class);

    @Autowired
    OrderService orderService;

//THIS IS THE 1ST METHOD CALLED ON PAGE
    @RequestMapping(value = "{clientId}", method = RequestMethod.GET)
    public String showOrderPage(@PathVariable Long clientId, Model model) {

        model.addAttribute("orderViewVO", new OrderViewVO());
        return "/order/orderView";
    }

    //I want model tp be updated here
    @RequestMapping(value = "/pro", method = RequestMethod.POST)
    public @ResponseBody
    OrderViewVO fetchProduct(
            @RequestParam(value = "brId", required = true) String brId,
            @RequestParam(value = "categoryId", required = true) String categoryId,
            Model model) {
        LOGGER.info("Entry fetchProduct()");
        LOGGER.debug("Branch Id: " + brId + ", Category Id: " + categoryId);

        OrderViewVO orderViewVO = null;
        orderViewVO = orderService.fecthProduct(categoryId, brId);
        //this has no effects on model values
        model.addAttribute("orderViewVO", orderViewVO);
        LOGGER.info("Exit fetchProduct()");
        return orderViewVO;
    }

}

Часть моего JSP -

   <script type="text/javascript">  

function showOptions(categorySelect,defaultRow) 
{
    if(defaultRow=='0') {
        var categoryId = categorySelect;    
    }   else    {
        var categoryId = categorySelect.id;
    }
    var brId = document.getElementById("bId").value;
    $.post("/guru/cloud/order/pro",
             {  
                brId:brId,
                categoryId:categoryId,
             },
              function(subMenu){                     
                        document.getElementById("tax").value = subMenu.tax;
                        //here i can populate any values fetched in fetchProduct()
                        }                     
                      showHtml=showHtml+" </table>";
                      $("#page_content").html(showHtml);
                    }); 
    }

</script>
<body>

<form:form id="orderView" name="orderView" method="post" modelAttribute="orderViewVO" >
<jsp:directive.include file="../common/header.jsp" />
<input type="hidden" id="bId" value=""/>
<input type="hidden" id="tax" value=""/>
<div style="display:none">
    <div id="cartCheckoutHiddenDiv">
    <!-- cart details to be posted to server -->
    <form:input path="orderData" type="text" id="orderData" name="orderData" value=""/>
            <table cellpadding="0" cellspacing="0" width="100%" border="0" class="checkoutTable">
                <tr><td colspan="2" style="text-align:center">Order is placed for
                </td></tr>
                <!--branchAdd1,branchAdd2 ect are updated in fetchProduct() but are NULL here -->
                <tr><td style="text-align:center"><form:label path="branchAdd1" /></td>
                <td><form:label path="branchAdd2" /></td></tr>
                <tr><td colspan="2">Total Bill amount is : <span id="totalBill"></span></td></tr>
                <tr><!-- start of info row -->
    </div>
</div>
</form:form>
</body>
</html>
</jsp:root>

VO

    public class OrderViewVO implements Serializable {

    private static final long serialVersionUID = 5352956022679804562L;

    private String branchId = null;

    private String branchName = null;

    private String branchAdd1 = null;

    private String branchAdd2 = null;
//getter, setter below

Может кто-нибудь сказать мне, почему я не смог заполнить обновленные значения orderVo? Это из-за AJAX? Я даже использовал SessionAttribut

...